diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5761c5c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,117 @@
+# ---> Java
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+#Fabric
+run/
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+# ---> JetBrains
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/usage.statistics.xml
+.idea/**/dictionaries
+.idea/**/shelf
+
+# AWS User-specific
+.idea/**/aws.xml
+
+# Generated files
+.idea/**/contentModel.xml
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# Gradle and Maven with auto-import
+# When using Gradle or Maven with auto-import, you should exclude module files,
+# since they will be recreated, and may cause churn. Uncomment if using
+# auto-import.
+# .idea/artifacts
+# .idea/compiler.xml
+# .idea/jarRepositories.xml
+# .idea/modules.xml
+# .idea/*.iml
+# .idea/modules
+# *.iml
+# *.ipr
+
+# CMake
+cmake-build-*/
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
+
+# Android studio 3.1+ serialized cache file
+.idea/caches/build_file_checksums.ser
+
+# ---> Gradle
+.gradle
+**/build/
+!src/**/build/
+
+# Ignore Gradle GUI config
+gradle-app.setting
+
+# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
+!gradle-wrapper.jar
+
+# Cache of project
+.gradletasknamecache
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..659bf43
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..59d8f95
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..adc47b4
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..797acea
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/Minecraft_Client.xml b/.idea/runConfigurations/Minecraft_Client.xml
new file mode 100644
index 0000000..ead8fdd
--- /dev/null
+++ b/.idea/runConfigurations/Minecraft_Client.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/runConfigurations/Minecraft_Server.xml b/.idea/runConfigurations/Minecraft_Server.xml
new file mode 100644
index 0000000..19e6ddb
--- /dev/null
+++ b/.idea/runConfigurations/Minecraft_Server.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..8a52160
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,46 @@
+plugins {
+ id 'fabric-loom' version '0.9-SNAPSHOT'
+ id 'maven-publish'
+}
+
+sourceCompatibility = JavaVersion.VERSION_16
+targetCompatibility = JavaVersion.VERSION_16
+
+archivesBaseName = project.archives_base_name
+version = project.mod_version
+group = project.maven_group
+
+repositories {
+ mavenCentral()
+}
+
+dependencies {
+ minecraft "com.mojang:minecraft:${project.minecraft_version}"
+ mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
+ modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
+
+ modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
+}
+
+processResources {
+ inputs.property "version", project.version
+
+ filesMatching("fabric.mod.json") {
+ expand "version": project.version
+ }
+}
+
+tasks.withType(JavaCompile).configureEach {
+ it.options.encoding = "UTF-8"
+ it.options.release = 16
+}
+
+java {
+ withSourcesJar()
+}
+
+jar {
+ from("LICENSE") {
+ rename { "${it}_${project.archivesBaseName}"}
+ }
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..899d87f
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,16 @@
+# Done to increase the memory available to gradle.
+org.gradle.jvmargs=-Xmx2G
+
+# Fabric Properties
+# check these on https://fabricmc.net/versions.html
+minecraft_version=1.17.1
+yarn_mappings=1.17.1+build.63
+loader_version=0.11.7
+
+# Mod Properties
+mod_version = 1.0.0
+maven_group = tech.nevets
+archives_base_name = vplus
+
+# Dependencies
+fabric_version=0.41.0+1.17
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..7454180
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..69a9715
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..744e882
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,185 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MSYS* | MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..107acd3
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..2875cde
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,9 @@
+pluginManagement {
+ repositories {
+ maven {
+ name = 'Fabric'
+ url = 'https://maven.fabricmc.net/'
+ }
+ gradlePluginPortal()
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/Main.java b/src/main/java/tech/nevets/vplus/Main.java
new file mode 100644
index 0000000..42c5e6c
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/Main.java
@@ -0,0 +1,24 @@
+package tech.nevets.vplus;
+
+import net.fabricmc.api.ModInitializer;
+import tech.nevets.vplus.armor.VPArmor;
+import tech.nevets.vplus.blocks.VPBlocks;
+import tech.nevets.vplus.food.VPFood;
+import tech.nevets.vplus.items.VPItems;
+import tech.nevets.vplus.misc.VPFuels;
+import tech.nevets.vplus.misc.VPZoom;
+import tech.nevets.vplus.tools.VPTools;
+
+public class Main implements ModInitializer {
+
+ @Override
+ public void onInitialize() {
+ VPBlocks.vpBlocks();
+ VPItems.vpItems();
+ VPFood.vpFood();
+ VPTools.vpTools();
+ VPArmor.vpArmor();
+ VPFuels.vpFuels();
+ VPZoom.vpZoom();
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/armor/ArmorMaterials.java b/src/main/java/tech/nevets/vplus/armor/ArmorMaterials.java
new file mode 100644
index 0000000..69a11f0
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/armor/ArmorMaterials.java
@@ -0,0 +1,81 @@
+package tech.nevets.vplus.armor;
+
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.minecraft.entity.EquipmentSlot;
+import net.minecraft.item.ArmorMaterial;
+import net.minecraft.item.ItemConvertible;
+import net.minecraft.item.Items;
+import net.minecraft.recipe.Ingredient;
+import net.minecraft.sound.SoundEvent;
+import net.minecraft.sound.SoundEvents;
+import net.minecraft.util.Lazy;
+import tech.nevets.vplus.items.VPItems;
+
+import java.util.function.Supplier;
+
+public enum ArmorMaterials implements ArmorMaterial {
+ EMERALD("emerald", 30, new int[]{2, 6, 8, 2}, 30, SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND, 1.0F, 0.0F, () -> {
+ return Ingredient.ofItems(new ItemConvertible[]{Items.EMERALD});
+ }),
+ PLATINUM("platinum", 40, new int[]{6, 8, 10, 6}, 40, SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND, 1.0F, 0.5F, () -> {
+ return Ingredient.ofItems(new ItemConvertible[]{VPItems.PLATINUMINGOT});
+ }),
+ RUBY("ruby", 75, new int[]{10, 15, 20, 10}, 100, SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND, 4.0F, 1.0F, () -> {
+ return Ingredient.ofItems(new ItemConvertible[]{VPItems.RUBY});
+ });
+
+ private static final int[] BASE_DURABILITY = new int[]{13, 15, 16, 11};
+ private final String name;
+ private final int durabilityMultiplier;
+ private final int[] protectionAmounts;
+ private final int enchantability;
+ private final SoundEvent equipSound;
+ private final float toughness;
+ private final float knockbackResistance;
+ private final Lazy repairIngredientSupplier;
+
+ private ArmorMaterials(String name, int durabilityMultiplier, int[] protectionAmounts, int enchantability, SoundEvent equipSound, float toughness, float knockbackResistance, Supplier repairIngredientSupplier) {
+ this.name = name;
+ this.durabilityMultiplier = durabilityMultiplier;
+ this.protectionAmounts = protectionAmounts;
+ this.enchantability = enchantability;
+ this.equipSound = equipSound;
+ this.toughness = toughness;
+ this.knockbackResistance = knockbackResistance;
+ this.repairIngredientSupplier = new Lazy(repairIngredientSupplier);
+ }
+
+ public int getDurability(EquipmentSlot slot) {
+ return BASE_DURABILITY[slot.getEntitySlotId()] * this.durabilityMultiplier;
+ }
+
+ public int getProtectionAmount(EquipmentSlot slot) {
+ return this.protectionAmounts[slot.getEntitySlotId()];
+ }
+
+ public int getEnchantability() {
+ return this.enchantability;
+ }
+
+ public SoundEvent getEquipSound() {
+ return this.equipSound;
+ }
+
+ public Ingredient getRepairIngredient() {
+ return (Ingredient)this.repairIngredientSupplier.get();
+ }
+
+ @Environment(EnvType.CLIENT)
+ public String getName() {
+ return this.name;
+ }
+
+ public float getToughness() {
+ return this.toughness;
+ }
+
+ public float getKnockbackResistance() {
+ return this.knockbackResistance;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/armor/BaseArmor.java b/src/main/java/tech/nevets/vplus/armor/BaseArmor.java
new file mode 100644
index 0000000..7e712dd
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/armor/BaseArmor.java
@@ -0,0 +1,12 @@
+package tech.nevets.vplus.armor;
+
+import net.minecraft.entity.EquipmentSlot;
+import net.minecraft.item.ArmorItem;
+import net.minecraft.item.ArmorMaterial;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class BaseArmor extends ArmorItem {
+ public BaseArmor(ArmorMaterial material, EquipmentSlot slot) {
+ super(material, slot, new Settings().group(VPItemGroups.COMBAT));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/armor/VPArmor.java b/src/main/java/tech/nevets/vplus/armor/VPArmor.java
new file mode 100644
index 0000000..941558f
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/armor/VPArmor.java
@@ -0,0 +1,44 @@
+package tech.nevets.vplus.armor;
+
+import net.minecraft.entity.EquipmentSlot;
+import net.minecraft.item.ArmorMaterial;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.registry.Registry;
+
+public class VPArmor {
+
+ public static final ArmorMaterial EMERALD_ARMOR = ArmorMaterials.EMERALD;
+ public static final ArmorMaterial PLATINUM_ARMOR = ArmorMaterials.PLATINUM;
+ public static final ArmorMaterial RUBY_ARMOR = ArmorMaterials.RUBY;
+
+ public static void vpArmor() {
+ initializeHelmet();
+ initializeChestplates();
+ initialzeLeggings();
+ initializeBoots();
+ }
+
+ public static void initializeHelmet() {
+ Registry.register(Registry.ITEM, new Identifier("vplus", "emerald_helmet"), new BaseArmor(EMERALD_ARMOR, EquipmentSlot.HEAD));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_helmet"), new BaseArmor(PLATINUM_ARMOR, EquipmentSlot.HEAD));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "ruby_helmet"), new BaseArmor(RUBY_ARMOR, EquipmentSlot.HEAD));
+ }
+
+ public static void initializeChestplates() {
+ Registry.register(Registry.ITEM, new Identifier("vplus", "emerald_chestplate"), new BaseArmor(EMERALD_ARMOR, EquipmentSlot.CHEST));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_chestplate"), new BaseArmor(PLATINUM_ARMOR, EquipmentSlot.CHEST));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "ruby_chestplate"), new BaseArmor(RUBY_ARMOR, EquipmentSlot.CHEST));
+ }
+
+ public static void initialzeLeggings() {
+ Registry.register(Registry.ITEM, new Identifier("vplus", "emerald_leggings"), new BaseArmor(EMERALD_ARMOR, EquipmentSlot.LEGS));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_leggings"), new BaseArmor(PLATINUM_ARMOR, EquipmentSlot.LEGS));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "ruby_leggings"), new BaseArmor(RUBY_ARMOR, EquipmentSlot.LEGS));
+ }
+
+ public static void initializeBoots() {
+ Registry.register(Registry.ITEM, new Identifier("vplus", "emerald_boots"), new BaseArmor(EMERALD_ARMOR, EquipmentSlot.FEET));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_boots"), new BaseArmor(PLATINUM_ARMOR, EquipmentSlot.FEET));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "ruby_boots"), new BaseArmor(RUBY_ARMOR, EquipmentSlot.FEET));
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/blocks/ColorTorchBlock.java b/src/main/java/tech/nevets/vplus/blocks/ColorTorchBlock.java
new file mode 100644
index 0000000..80516b0
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/blocks/ColorTorchBlock.java
@@ -0,0 +1,46 @@
+package tech.nevets.vplus.blocks;
+
+import java.util.Random;
+
+import net.minecraft.block.*;
+import net.minecraft.particle.ParticleEffect;
+import net.minecraft.particle.ParticleTypes;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.Direction;
+import net.minecraft.util.shape.VoxelShape;
+import net.minecraft.world.BlockView;
+import net.minecraft.world.World;
+import net.minecraft.world.WorldAccess;
+import net.minecraft.world.WorldView;
+
+public class ColorTorchBlock extends Block {
+ protected static final int field_31265 = 2;
+ protected static final VoxelShape BOUNDING_SHAPE = Block.createCuboidShape(6.0D, 0.0D, 6.0D, 10.0D, 10.0D, 10.0D);
+ protected final ParticleEffect particle;
+
+
+ public ColorTorchBlock(Settings settings, ParticleEffect particle) {
+ super(settings);
+ this.particle = particle;
+ }
+
+ public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
+ return BOUNDING_SHAPE;
+ }
+
+ public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
+ return direction == Direction.DOWN && !this.canPlaceAt(state, world, pos) ? Blocks.AIR.getDefaultState() : super.getStateForNeighborUpdate(state, direction, neighborState, world, pos, neighborPos);
+ }
+
+ public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) {
+ return sideCoversSmallSquare(world, pos.down(), Direction.UP);
+ }
+
+ public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) {
+ double d = (double)pos.getX() + 0.5D;
+ double e = (double)pos.getY() + 0.7D;
+ double f = (double)pos.getZ() + 0.5D;
+ world.addParticle(ParticleTypes.SMOKE, d, e, f, 0.0D, 0.0D, 0.0D);
+ world.addParticle(this.particle, d, e, f, 0.0D, 0.0D, 0.0D);
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/blocks/ColorWallTorchBlock.java b/src/main/java/tech/nevets/vplus/blocks/ColorWallTorchBlock.java
new file mode 100644
index 0000000..4f6390a
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/blocks/ColorWallTorchBlock.java
@@ -0,0 +1,110 @@
+package tech.nevets.vplus.blocks;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import net.minecraft.block.*;
+import net.minecraft.item.ItemPlacementContext;
+import net.minecraft.particle.ParticleEffect;
+import net.minecraft.particle.ParticleTypes;
+import net.minecraft.state.StateManager;
+import net.minecraft.state.property.DirectionProperty;
+import net.minecraft.state.property.Property;
+import net.minecraft.util.BlockMirror;
+import net.minecraft.util.BlockRotation;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.Direction;
+import net.minecraft.util.shape.VoxelShape;
+import net.minecraft.world.BlockView;
+import net.minecraft.world.World;
+import net.minecraft.world.WorldAccess;
+import net.minecraft.world.WorldView;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+import java.util.Random;
+
+public class ColorWallTorchBlock extends TorchBlock {
+ public static final DirectionProperty FACING;
+ protected static final float field_31285 = 2.5F;
+ private static final Map BOUNDING_SHAPES;
+
+ protected ColorWallTorchBlock(Settings settings, ParticleEffect particleEffect) {
+ super(settings, particleEffect);
+ this.setDefaultState((BlockState)((BlockState)this.stateManager.getDefaultState()).with(FACING, Direction.NORTH));
+ }
+
+ public String getTranslationKey() {
+ return this.asItem().getTranslationKey();
+ }
+
+ public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
+ return getBoundingShape(state);
+ }
+
+ public static VoxelShape getBoundingShape(BlockState state) {
+ return (VoxelShape)BOUNDING_SHAPES.get(state.get(FACING));
+ }
+
+ public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) {
+ Direction direction = (Direction)state.get(FACING);
+ BlockPos blockPos = pos.offset(direction.getOpposite());
+ BlockState blockState = world.getBlockState(blockPos);
+ return blockState.isSideSolidFullSquare(world, blockPos, direction);
+ }
+
+ @Nullable
+ public BlockState getPlacementState(ItemPlacementContext ctx) {
+ BlockState blockState = this.getDefaultState();
+ WorldView worldView = ctx.getWorld();
+ BlockPos blockPos = ctx.getBlockPos();
+ Direction[] directions = ctx.getPlacementDirections();
+ Direction[] var6 = directions;
+ int var7 = directions.length;
+
+ for(int var8 = 0; var8 < var7; ++var8) {
+ Direction direction = var6[var8];
+ if (direction.getAxis().isHorizontal()) {
+ Direction direction2 = direction.getOpposite();
+ blockState = (BlockState)blockState.with(FACING, direction2);
+ if (blockState.canPlaceAt(worldView, blockPos)) {
+ return blockState;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
+ return direction.getOpposite() == state.get(FACING) && !state.canPlaceAt(world, pos) ? Blocks.AIR.getDefaultState() : state;
+ }
+
+ public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) {
+ Direction direction = (Direction)state.get(FACING);
+ double d = (double)pos.getX() + 0.5D;
+ double e = (double)pos.getY() + 0.7D;
+ double f = (double)pos.getZ() + 0.5D;
+ double g = 0.22D;
+ double h = 0.27D;
+ Direction direction2 = direction.getOpposite();
+ world.addParticle(ParticleTypes.SMOKE, d + 0.27D * (double)direction2.getOffsetX(), e + 0.22D, f + 0.27D * (double)direction2.getOffsetZ(), 0.0D, 0.0D, 0.0D);
+ world.addParticle(this.particle, d + 0.27D * (double)direction2.getOffsetX(), e + 0.22D, f + 0.27D * (double)direction2.getOffsetZ(), 0.0D, 0.0D, 0.0D);
+ }
+
+ public BlockState rotate(BlockState state, BlockRotation rotation) {
+ return (BlockState)state.with(FACING, rotation.rotate((Direction)state.get(FACING)));
+ }
+
+ public BlockState mirror(BlockState state, BlockMirror mirror) {
+ return state.rotate(mirror.getRotation((Direction)state.get(FACING)));
+ }
+
+ protected void appendProperties(StateManager.Builder builder) {
+ builder.add(new Property[]{FACING});
+ }
+
+ static {
+ FACING = HorizontalFacingBlock.FACING;
+ BOUNDING_SHAPES = Maps.newEnumMap(ImmutableMap.of(Direction.NORTH, Block.createCuboidShape(5.5D, 3.0D, 11.0D, 10.5D, 13.0D, 16.0D), Direction.SOUTH, Block.createCuboidShape(5.5D, 3.0D, 0.0D, 10.5D, 13.0D, 5.0D), Direction.WEST, Block.createCuboidShape(11.0D, 3.0D, 5.5D, 16.0D, 13.0D, 10.5D), Direction.EAST, Block.createCuboidShape(0.0D, 3.0D, 5.5D, 5.0D, 13.0D, 10.5D)));
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/blocks/LavaSpongeBlock.java b/src/main/java/tech/nevets/vplus/blocks/LavaSpongeBlock.java
new file mode 100644
index 0000000..85da91a
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/blocks/LavaSpongeBlock.java
@@ -0,0 +1,81 @@
+package tech.nevets.vplus.blocks;
+
+import com.google.common.collect.Lists;
+import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
+import net.minecraft.block.*;
+import net.minecraft.fluid.FluidState;
+import net.minecraft.sound.BlockSoundGroup;
+import net.minecraft.tag.FluidTags;
+import net.minecraft.util.Pair;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.Direction;
+import net.minecraft.world.World;
+
+import java.util.Queue;
+
+public class LavaSpongeBlock extends Block {
+
+
+ public LavaSpongeBlock() {
+ super(FabricBlockSettings.of(Material.STONE).strength(0.6F).sounds(BlockSoundGroup.BASALT));
+ }
+
+ public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean notify) {
+ if (!oldState.isOf(state.getBlock())) {
+ this.update(world, pos);
+ }
+ }
+
+ public void neighborUpdate(BlockState state, World world, BlockPos pos, Block block, BlockPos fromPos, boolean notify) {
+ this.update(world, pos);
+ super.neighborUpdate(state, world, pos, block, fromPos, notify);
+ }
+
+ protected void update(World world, BlockPos pos) {
+ if (this.absorbLava(world, pos)) {
+ world.setBlockState(pos, VPBlocks.SATURATEDLAVASPONGEBLOCK.getDefaultState(), 2);
+ world.syncWorldEvent(2001, pos, Block.getRawIdFromState(Blocks.LAVA.getDefaultState()));
+ }
+
+ }
+
+ private boolean absorbLava(World world, BlockPos pos) {
+ Queue> queue = Lists.newLinkedList();
+ queue.add(new Pair(pos, 0));
+ int i = 0;
+
+ while(!queue.isEmpty()) {
+ Pair pair = (Pair)queue.poll();
+ BlockPos blockPos = (BlockPos)pair.getLeft();
+ int j = (Integer)pair.getRight();
+ Direction[] var8 = Direction.values();
+ int var9 = var8.length;
+
+ for(int var10 = 0; var10 < var9; ++var10) {
+ Direction direction = var8[var10];
+ BlockPos blockPos2 = blockPos.offset(direction);
+ BlockState blockState = world.getBlockState(blockPos2);
+ FluidState fluidState = world.getFluidState(blockPos2);
+ Material material = blockState.getMaterial();
+ if (fluidState.isIn(FluidTags.LAVA)) {
+ if (blockState.getBlock() instanceof FluidDrainable && !((FluidDrainable)blockState.getBlock()).tryDrainFluid(world, blockPos2, blockState).isEmpty()) {
+ ++i;
+ if (j < 6) {
+ queue.add(new Pair(blockPos2, j + 1));
+ }
+ } else if (blockState.getBlock() instanceof FluidBlock) {
+ world.setBlockState(blockPos2, Blocks.AIR.getDefaultState(), 3);
+ ++i;
+ if (j < 6) {
+ queue.add(new Pair(blockPos2, j + 1));
+ }
+ }
+ }
+ }
+ if (i > 64) {
+ break;
+ }
+ }
+ return i > 0;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/blocks/PlatinumBlock.java b/src/main/java/tech/nevets/vplus/blocks/PlatinumBlock.java
new file mode 100644
index 0000000..5d0ff84
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/blocks/PlatinumBlock.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.blocks;
+
+import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
+import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
+import net.minecraft.block.Block;
+import net.minecraft.block.Material;
+import net.minecraft.sound.BlockSoundGroup;
+
+public class PlatinumBlock extends Block {
+ public PlatinumBlock() {
+ super(FabricBlockSettings.of(Material.STONE).breakByHand(false).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.METAL).strength(30, 1000f));
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/blocks/PlatinumOre.java b/src/main/java/tech/nevets/vplus/blocks/PlatinumOre.java
new file mode 100644
index 0000000..c9fb578
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/blocks/PlatinumOre.java
@@ -0,0 +1,36 @@
+package tech.nevets.vplus.blocks;
+
+import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
+import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.Material;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.enchantment.Enchantments;
+import net.minecraft.item.ItemStack;
+import net.minecraft.server.world.ServerWorld;
+import net.minecraft.sound.BlockSoundGroup;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.MathHelper;
+
+import java.util.Random;
+
+public class PlatinumOre extends Block {
+ public PlatinumOre() {
+ super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES, 3).sounds(BlockSoundGroup.STONE).strength(3, 1500f));
+ }
+ protected int getExperienceWhenMined(Random random) {
+ return MathHelper.nextInt(random, 3, 7);
+ }
+
+ public void onStacksDropped(BlockState state, ServerWorld world, BlockPos pos, ItemStack stack) {
+ super.onStacksDropped(state, world, pos, stack);
+ if (EnchantmentHelper.getLevel(Enchantments.SILK_TOUCH, stack) == 0) {
+ int i = this.getExperienceWhenMined(world.random);
+ if (i > 0) {
+ this.dropExperience(world, pos, i);
+ }
+ }
+
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/blocks/RubyBlock.java b/src/main/java/tech/nevets/vplus/blocks/RubyBlock.java
new file mode 100644
index 0000000..21a1e2b
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/blocks/RubyBlock.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.blocks;
+
+import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
+import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
+import net.minecraft.block.Block;
+import net.minecraft.block.Material;
+import net.minecraft.sound.BlockSoundGroup;
+
+public class RubyBlock extends Block {
+ public RubyBlock() {
+ super(FabricBlockSettings.of(Material.STONE).breakByHand(false).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.METAL).strength(5, 6.0f));
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/blocks/RubyOre.java b/src/main/java/tech/nevets/vplus/blocks/RubyOre.java
new file mode 100644
index 0000000..7a7a2c6
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/blocks/RubyOre.java
@@ -0,0 +1,35 @@
+package tech.nevets.vplus.blocks;
+
+import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
+import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.Material;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.enchantment.Enchantments;
+import net.minecraft.item.ItemStack;
+import net.minecraft.server.world.ServerWorld;
+import net.minecraft.sound.BlockSoundGroup;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.MathHelper;
+
+import java.util.Random;
+
+public class RubyOre extends Block {
+ public RubyOre() {
+ super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES, 3).sounds(BlockSoundGroup.STONE).strength(3, 1500f));
+ }
+ protected int getExperienceWhenMined(Random random) {
+ return MathHelper.nextInt(random, 3, 7);
+ }
+
+ public void onStacksDropped(BlockState state, ServerWorld world, BlockPos pos, ItemStack stack) {
+ super.onStacksDropped(state, world, pos, stack);
+ if (EnchantmentHelper.getLevel(Enchantments.SILK_TOUCH, stack) == 0) {
+ int i = this.getExperienceWhenMined(world.random);
+ if (i > 0) {
+ this.dropExperience(world, pos, i);
+ }
+ }
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/blocks/SaturatedLavaSpongeBlock.java b/src/main/java/tech/nevets/vplus/blocks/SaturatedLavaSpongeBlock.java
new file mode 100644
index 0000000..47413da
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/blocks/SaturatedLavaSpongeBlock.java
@@ -0,0 +1,61 @@
+package tech.nevets.vplus.blocks;
+
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.Material;
+import net.minecraft.particle.ParticleTypes;
+import net.minecraft.sound.BlockSoundGroup;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.Direction;
+import net.minecraft.world.World;
+
+import java.util.Random;
+
+public class SaturatedLavaSpongeBlock extends Block {
+
+ public SaturatedLavaSpongeBlock() {
+ super(FabricBlockSettings.of(Material.STONE).strength(0.6F).sounds(BlockSoundGroup.BASALT));
+ }
+
+ @Environment(EnvType.CLIENT)
+ public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) {
+ Direction direction = Direction.random(random);
+ if (direction != Direction.UP) {
+ BlockPos blockPos = pos.offset(direction);
+ BlockState blockState = world.getBlockState(blockPos);
+ if (!state.isOpaque() || !blockState.isSideSolidFullSquare(world, blockPos, direction.getOpposite())) {
+ double d = (double)pos.getX();
+ double e = (double)pos.getY();
+ double f = (double)pos.getZ();
+ if (direction == Direction.DOWN) {
+ e -= 0.05D;
+ d += random.nextDouble();
+ f += random.nextDouble();
+ } else {
+ e += random.nextDouble() * 0.8D;
+ if (direction.getAxis() == Direction.Axis.X) {
+ f += random.nextDouble();
+ if (direction == Direction.EAST) {
+ ++d;
+ } else {
+ d += 0.05D;
+ }
+ } else {
+ d += random.nextDouble();
+ if (direction == Direction.SOUTH) {
+ ++f;
+ } else {
+ f += 0.05D;
+ }
+ }
+ }
+
+ world.addParticle(ParticleTypes.DRIPPING_LAVA, d, e, f, 0.0D, 0.0D, 0.0D);
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/tech/nevets/vplus/blocks/VPBlocks.java b/src/main/java/tech/nevets/vplus/blocks/VPBlocks.java
new file mode 100644
index 0000000..6bb8d5b
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/blocks/VPBlocks.java
@@ -0,0 +1,49 @@
+package tech.nevets.vplus.blocks;
+
+import net.minecraft.block.*;
+import net.minecraft.item.BlockItem;
+import net.minecraft.item.Item;
+import net.minecraft.particle.ParticleTypes;
+import net.minecraft.sound.BlockSoundGroup;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.registry.Registry;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class VPBlocks {
+
+ public static final Block LAVASPONGEBLOCK = new LavaSpongeBlock();
+ public static final Block SATURATEDLAVASPONGEBLOCK = new SaturatedLavaSpongeBlock();
+ public static final Block PLATINUMORE = new PlatinumOre();
+ public static final Block PLATINUMBLOCK = new PlatinumBlock();
+ public static final Block RUBYBLOCK = new RubyBlock();
+ public static final Block RUBYORE = new RubyOre();
+
+ public static void vpBlocks() {
+ initializeBlocks();
+ initializeBlockItems();
+ initializeTorches();
+ }
+
+ public static void initializeBlocks() {
+ Registry.register(Registry.BLOCK, new Identifier("vplus", "lava_sponge"), LAVASPONGEBLOCK);
+ Registry.register(Registry.BLOCK, new Identifier("vplus", "saturated_lava_sponge"), SATURATEDLAVASPONGEBLOCK);
+ Registry.register(Registry.BLOCK, new Identifier("vplus", "platinum_ore"), PLATINUMORE);
+ Registry.register(Registry.BLOCK, new Identifier("vplus", "platinum_block"), PLATINUMBLOCK);
+ Registry.register(Registry.BLOCK, new Identifier("vplus", "ruby_block"), RUBYBLOCK);
+ Registry.register(Registry.BLOCK, new Identifier("vplus", "ruby_ore"), RUBYORE);
+ }
+
+ public static void initializeBlockItems() {
+ Registry.register(Registry.ITEM, new Identifier("vplus", "lava_sponge"), new BlockItem(LAVASPONGEBLOCK, new Item.Settings().group(VPItemGroups.ALL)));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "saturated_lava_sponge"), new BlockItem(SATURATEDLAVASPONGEBLOCK, new Item.Settings().group(VPItemGroups.ALL).recipeRemainder(Item.fromBlock(VPBlocks.LAVASPONGEBLOCK))));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_ore"), new BlockItem(PLATINUMORE, new Item.Settings().group(VPItemGroups.ALL)));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_block"), new BlockItem(PLATINUMBLOCK, new Item.Settings().group(VPItemGroups.ALL)));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "ruby_block"), new BlockItem(RUBYBLOCK, new Item.Settings().group(VPItemGroups.ALL)));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "ruby_ore"), new BlockItem(RUBYORE, new Item.Settings().group(VPItemGroups.ALL)));
+ }
+
+ public static void initializeTorches() {
+ Registry.register(Registry.BLOCK, new Identifier("vplus", "green_torch"), new ColorTorchBlock(AbstractBlock.Settings.of(Material.DECORATION).noCollision().breakInstantly().luminance((state) -> {return 14;}).sounds(BlockSoundGroup.WOOD), ParticleTypes.FLAME));
+ Registry.register(Registry.BLOCK, new Identifier("vplus", "green_wall_torch"), new ColorWallTorchBlock(AbstractBlock.Settings.of(Material.DECORATION).noCollision().breakInstantly().luminance((state) -> {return 14;}).sounds(BlockSoundGroup.WOOD).dropsLike(Blocks.TORCH), ParticleTypes.FLAME));
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/food/DiamondApple.java b/src/main/java/tech/nevets/vplus/food/DiamondApple.java
new file mode 100644
index 0000000..dc16f05
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/food/DiamondApple.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.food;
+
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.item.FoodComponent;
+import net.minecraft.item.Item;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class DiamondApple extends Item {
+ public DiamondApple() {
+ super(new Settings().group(VPItemGroups.FOOD).food(new FoodComponent.Builder().hunger(8).saturationModifier(14).alwaysEdible().statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 20*120, 3),1f).build()));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/food/EmeraldApple.java b/src/main/java/tech/nevets/vplus/food/EmeraldApple.java
new file mode 100644
index 0000000..091298d
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/food/EmeraldApple.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.food;
+
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.item.FoodComponent;
+import net.minecraft.item.Item;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class EmeraldApple extends Item {
+ public EmeraldApple() {
+ super(new Settings().group(VPItemGroups.FOOD).food(new FoodComponent.Builder().hunger(12).saturationModifier(16).alwaysEdible().statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 20*120, 5),1f).build()));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/food/EnchantedDiamondApple.java b/src/main/java/tech/nevets/vplus/food/EnchantedDiamondApple.java
new file mode 100644
index 0000000..79582da
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/food/EnchantedDiamondApple.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.food;
+
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.item.FoodComponent;
+import net.minecraft.item.Item;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class EnchantedDiamondApple extends Item {
+ public EnchantedDiamondApple() {
+ super(new Settings().group(VPItemGroups.FOOD).food(new FoodComponent.Builder().hunger(8).saturationModifier(14).alwaysEdible().statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 20*120, 4),1f).build()));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/food/EnchantedEmeraldApple.java b/src/main/java/tech/nevets/vplus/food/EnchantedEmeraldApple.java
new file mode 100644
index 0000000..5ed0c25
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/food/EnchantedEmeraldApple.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.food;
+
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.item.FoodComponent;
+import net.minecraft.item.Item;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class EnchantedEmeraldApple extends Item {
+ public EnchantedEmeraldApple() {
+ super(new Settings().group(VPItemGroups.FOOD).food(new FoodComponent.Builder().hunger(12).saturationModifier(16).alwaysEdible().statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 20*120, 6),1f).build()));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/food/EnchantedIronApple.java b/src/main/java/tech/nevets/vplus/food/EnchantedIronApple.java
new file mode 100644
index 0000000..e826f6e
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/food/EnchantedIronApple.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.food;
+
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.item.FoodComponent;
+import net.minecraft.item.Item;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class EnchantedIronApple extends Item {
+ public EnchantedIronApple() {
+ super(new Settings().group(VPItemGroups.FOOD).food(new FoodComponent.Builder().hunger(6).saturationModifier(10).alwaysEdible().statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 20*120, 2),1f).build()));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/food/EnchantedNetheriteApple.java b/src/main/java/tech/nevets/vplus/food/EnchantedNetheriteApple.java
new file mode 100644
index 0000000..a7d8aa4
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/food/EnchantedNetheriteApple.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.food;
+
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.item.FoodComponent;
+import net.minecraft.item.Item;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class EnchantedNetheriteApple extends Item {
+ public EnchantedNetheriteApple() {
+ super(new Settings().group(VPItemGroups.FOOD).food(new FoodComponent.Builder().hunger(14).saturationModifier(18).alwaysEdible().statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 20*120, 8),1f).build()));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/food/EnchantedPlatinumApple.java b/src/main/java/tech/nevets/vplus/food/EnchantedPlatinumApple.java
new file mode 100644
index 0000000..b8ca1e1
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/food/EnchantedPlatinumApple.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.food;
+
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.item.FoodComponent;
+import net.minecraft.item.Item;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class EnchantedPlatinumApple extends Item {
+ public EnchantedPlatinumApple() {
+ super(new Settings().group(VPItemGroups.FOOD).food(new FoodComponent.Builder().hunger(16).saturationModifier(20).alwaysEdible().statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 20*120, 10),1f).build()));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/food/EnchantedRubyApple.java b/src/main/java/tech/nevets/vplus/food/EnchantedRubyApple.java
new file mode 100644
index 0000000..2772ad6
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/food/EnchantedRubyApple.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.food;
+
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.item.FoodComponent;
+import net.minecraft.item.Item;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class EnchantedRubyApple extends Item {
+ public EnchantedRubyApple() {
+ super(new Settings().group(VPItemGroups.FOOD).food(new FoodComponent.Builder().hunger(18).saturationModifier(22).alwaysEdible().statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 20*120, 12),1f).build()));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/food/IronApple.java b/src/main/java/tech/nevets/vplus/food/IronApple.java
new file mode 100644
index 0000000..6737c07
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/food/IronApple.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.food;
+
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.item.FoodComponent;
+import net.minecraft.item.Item;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class IronApple extends Item {
+ public IronApple() {
+ super(new Settings().group(VPItemGroups.FOOD).food(new FoodComponent.Builder().hunger(6).saturationModifier(10).alwaysEdible().statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 20*120, 1),1f).build()));
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/food/NetheriteApple.java b/src/main/java/tech/nevets/vplus/food/NetheriteApple.java
new file mode 100644
index 0000000..1c326eb
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/food/NetheriteApple.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.food;
+
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.item.FoodComponent;
+import net.minecraft.item.Item;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class NetheriteApple extends Item {
+ public NetheriteApple() {
+ super(new Settings().group(VPItemGroups.FOOD).food(new FoodComponent.Builder().hunger(14).saturationModifier(18).alwaysEdible().statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 20*120, 7),1f).build()));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/food/PlatinumApple.java b/src/main/java/tech/nevets/vplus/food/PlatinumApple.java
new file mode 100644
index 0000000..3ee0b04
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/food/PlatinumApple.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.food;
+
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.item.FoodComponent;
+import net.minecraft.item.Item;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class PlatinumApple extends Item {
+ public PlatinumApple() {
+ super(new Settings().group(VPItemGroups.FOOD).food(new FoodComponent.Builder().hunger(16).saturationModifier(20).alwaysEdible().statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 20*120, 9),1f).build()));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/food/RubyApple.java b/src/main/java/tech/nevets/vplus/food/RubyApple.java
new file mode 100644
index 0000000..75a8b19
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/food/RubyApple.java
@@ -0,0 +1,13 @@
+package tech.nevets.vplus.food;
+
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.item.FoodComponent;
+import net.minecraft.item.Item;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class RubyApple extends Item {
+ public RubyApple() {
+ super(new Settings().group(VPItemGroups.FOOD).food(new FoodComponent.Builder().hunger(18).saturationModifier(22).alwaysEdible().statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 20*120, 11),1f).build()));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/food/VPFood.java b/src/main/java/tech/nevets/vplus/food/VPFood.java
new file mode 100644
index 0000000..4b54c17
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/food/VPFood.java
@@ -0,0 +1,41 @@
+package tech.nevets.vplus.food;
+
+import net.minecraft.item.Item;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.registry.Registry;
+
+public class VPFood {
+
+ public static final Item IRONAPPLE = new IronApple();
+ public static final Item ENCHANTEDIRONAPPLE = new EnchantedIronApple();
+ public static final Item DIAMONDAPPLE = new DiamondApple();
+ public static final Item ENCHANTEDDIAMONDAPPLE = new EnchantedDiamondApple();
+ public static final Item EMERALDAPPLE = new EmeraldApple();
+ public static final Item ENCHANTEDEMERALDAPPLE = new EnchantedEmeraldApple();
+ public static final Item NETHERITEAPPLE = new NetheriteApple();
+ public static final Item ENCHANTEDNETHERITEAPPLE = new EnchantedNetheriteApple();
+ public static final Item PLATINUMAPPLE = new PlatinumApple();
+ public static final Item ENCHANTEDPLATINUMAPPLE = new EnchantedPlatinumApple();
+ public static final Item RUBYAPPLE = new RubyApple();
+ public static final Item ENCHANTEDRUBYAPPLE = new EnchantedRubyApple();
+
+ public static void vpFood() {
+ initializeApples();
+ }
+
+ //TODO Balance apple strengths
+ public static void initializeApples() {
+ Registry.register(Registry.ITEM, new Identifier("vplus", "iron_apple"), IRONAPPLE);
+ Registry.register(Registry.ITEM, new Identifier("vplus", "enchanted_iron_apple"), ENCHANTEDIRONAPPLE);
+ Registry.register(Registry.ITEM, new Identifier("vplus", "diamond_apple"), DIAMONDAPPLE);
+ Registry.register(Registry.ITEM, new Identifier("vplus", "enchanted_diamond_apple"), ENCHANTEDDIAMONDAPPLE);
+ Registry.register(Registry.ITEM, new Identifier("vplus", "emerald_apple"), EMERALDAPPLE);
+ Registry.register(Registry.ITEM, new Identifier("vplus", "enchanted_emerald_apple"), ENCHANTEDEMERALDAPPLE);
+ Registry.register(Registry.ITEM, new Identifier("vplus", "netherite_apple"), NETHERITEAPPLE);
+ Registry.register(Registry.ITEM, new Identifier("vplus", "enchanted_netherite_apple"), ENCHANTEDNETHERITEAPPLE);
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_apple"), PLATINUMAPPLE);
+ Registry.register(Registry.ITEM, new Identifier("vplus", "enchanted_platinum_apple"), ENCHANTEDPLATINUMAPPLE);
+ Registry.register(Registry.ITEM, new Identifier("vplus", "ruby_apple"), RUBYAPPLE);
+ Registry.register(Registry.ITEM, new Identifier("vplus", "enchanted_ruby_apple"), ENCHANTEDRUBYAPPLE);
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/init/ZoomInit.java b/src/main/java/tech/nevets/vplus/init/ZoomInit.java
new file mode 100644
index 0000000..f6d0c0f
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/init/ZoomInit.java
@@ -0,0 +1,2 @@
+package tech.nevets.vplus.init;public class ZoomInit {
+}
diff --git a/src/main/java/tech/nevets/vplus/items/PlatinumIngot.java b/src/main/java/tech/nevets/vplus/items/PlatinumIngot.java
new file mode 100644
index 0000000..08e7a47
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/items/PlatinumIngot.java
@@ -0,0 +1,9 @@
+package tech.nevets.vplus.items;
+
+import net.minecraft.item.Item;
+
+public class PlatinumIngot extends Item {
+ public PlatinumIngot(Settings settings) {
+ super(settings);
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/items/PlatinumNugget.java b/src/main/java/tech/nevets/vplus/items/PlatinumNugget.java
new file mode 100644
index 0000000..a1623b6
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/items/PlatinumNugget.java
@@ -0,0 +1,9 @@
+package tech.nevets.vplus.items;
+
+import net.minecraft.item.Item;
+
+public class PlatinumNugget extends Item {
+ public PlatinumNugget(Settings settings) {
+ super(settings);
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/items/Ruby.java b/src/main/java/tech/nevets/vplus/items/Ruby.java
new file mode 100644
index 0000000..2e05af5
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/items/Ruby.java
@@ -0,0 +1,9 @@
+package tech.nevets.vplus.items;
+
+import net.minecraft.item.Item;
+
+public class Ruby extends Item {
+ public Ruby(Settings settings) {
+ super(settings);
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/items/VPItemGroups.java b/src/main/java/tech/nevets/vplus/items/VPItemGroups.java
new file mode 100644
index 0000000..1029e0f
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/items/VPItemGroups.java
@@ -0,0 +1,31 @@
+package tech.nevets.vplus.items;
+
+import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder;
+import net.minecraft.item.ItemGroup;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.util.Identifier;
+
+public class VPItemGroups {
+ //Creative Tab
+ public static final ItemGroup ALL = FabricItemGroupBuilder.build(
+ new Identifier("vplus", "all"),
+ () -> new ItemStack((Items.GRASS_BLOCK)));
+ //Combat Tab
+ public static final ItemGroup COMBAT = FabricItemGroupBuilder.build(
+ new Identifier("vplus", "combat"),
+ () -> new ItemStack((Items.DIAMOND_SWORD)));
+ //Tools Tab
+ public static final ItemGroup TOOLS = FabricItemGroupBuilder.create(
+ new Identifier("vplus", "tools"))
+ .icon(() -> new ItemStack(Items.DIAMOND_PICKAXE))
+ /*.appendItems(stacks -> {
+ stacks.add(new ItemStack(Main.RUBY));
+ stacks.add(new ItemStack(Items.EMERALD_BLOCK));
+ })*/
+ .build();
+ //Food Tab
+ public static final ItemGroup FOOD = FabricItemGroupBuilder.build(
+ new Identifier("vplus", "food"),
+ () -> new ItemStack((Items.ENCHANTED_GOLDEN_APPLE)));
+}
diff --git a/src/main/java/tech/nevets/vplus/items/VPItems.java b/src/main/java/tech/nevets/vplus/items/VPItems.java
new file mode 100644
index 0000000..02aec0a
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/items/VPItems.java
@@ -0,0 +1,23 @@
+package tech.nevets.vplus.items;
+
+import net.minecraft.item.Item;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.registry.Registry;
+
+public class VPItems {
+
+ public static final Item PLATINUMINGOT = new PlatinumIngot(new Item.Settings().group(VPItemGroups.ALL));
+ public static final Item PLATINUMNUGGET = new PlatinumNugget(new Item.Settings().group(VPItemGroups.ALL));
+ public static final Item RUBY = new Ruby(new Item.Settings().group(VPItemGroups.ALL));
+
+ public static void vpItems() {
+ initializeValuables();
+ }
+
+ public static void initializeValuables() {
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_ingot"), PLATINUMINGOT);
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_nugget"), PLATINUMNUGGET);
+ Registry.register(Registry.ITEM, new Identifier("vplus", "ruby"), RUBY);
+ }
+
+}
diff --git a/src/main/java/tech/nevets/vplus/misc/VPFuels.java b/src/main/java/tech/nevets/vplus/misc/VPFuels.java
new file mode 100644
index 0000000..28c5679
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/misc/VPFuels.java
@@ -0,0 +1,10 @@
+package tech.nevets.vplus.misc;
+
+import net.fabricmc.fabric.api.registry.FuelRegistry;
+import tech.nevets.vplus.blocks.SaturatedLavaSpongeBlock;
+
+public class VPFuels {
+ public static void vpFuels() {
+ FuelRegistry.INSTANCE.add(new SaturatedLavaSpongeBlock(), 20000);
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/misc/VPOreGen.java b/src/main/java/tech/nevets/vplus/misc/VPOreGen.java
new file mode 100644
index 0000000..2032dbd
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/misc/VPOreGen.java
@@ -0,0 +1,37 @@
+package tech.nevets.vplus.misc;
+
+import net.minecraft.world.gen.decorator.Decorator;
+import net.minecraft.world.gen.feature.ConfiguredFeature;
+import net.minecraft.world.gen.feature.Feature;
+import net.minecraft.world.gen.feature.OreFeatureConfig;
+import tech.nevets.vplus.blocks.VPBlocks;
+
+public class VPOreGen {
+
+ /*
+ private static ConfiguredFeature, ?> ORE_PLATINUM_OVERWORLD = Feature.ORE
+ .configure(new OreFeatureConfig(
+ OreFeatureConfig.Rules.BASE_STONE_OVERWORLD,
+ VPBlocks.PLATINUMORE.getDefaultState(),
+ 3)) // vein size
+ .decorate(Decorator.RANGE.configure(new RangeDecoratorConfig(
+ 0, // bottom offset
+ 0, // min y level
+ 15))) // max y level
+ .spreadHorizontally()
+ .repeat(2); // number of veins per chunk
+
+ private static ConfiguredFeature, ?> ORE_RUBY_OVERWORLD = Feature.ORE
+ .configure(new OreFeatureConfig(
+ OreFeatureConfig.Rules.BASE_STONE_OVERWORLD,
+ VPBlocks.RUBYORE.getDefaultState(),
+ 1)) // vein size
+ .decorate(Decorator.RANGE.configure(new RangeDecoratorConfig(
+ 0, // bottom offset
+ 0, // min y level
+ 256))) // max y level
+ .spreadHorizontally()
+ .repeat(8); // number of veins per chunk
+ */
+
+}
diff --git a/src/main/java/tech/nevets/vplus/misc/VPZoom.java b/src/main/java/tech/nevets/vplus/misc/VPZoom.java
new file mode 100644
index 0000000..f12cf63
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/misc/VPZoom.java
@@ -0,0 +1,25 @@
+package tech.nevets.vplus.misc;
+
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.option.KeyBinding;
+import net.minecraft.client.util.InputUtil;
+import org.lwjgl.glfw.GLFW;
+
+public class VPZoom {
+
+ public static Boolean currentlyZoomed;
+ public static KeyBinding keyBinding;
+ public static Boolean originalSmoothCameraEnabled;
+ public static final MinecraftClient mc = MinecraftClient.getInstance();
+
+ @Environment(EnvType.CLIENT)
+ public static void vpZoom() {
+ keyBinding = new KeyBinding("key.vplus.zoom", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_C, "category.vplus.zoom");
+ currentlyZoomed = false;
+ originalSmoothCameraEnabled = false;
+ KeyBindingHelper.registerKeyBinding(keyBinding);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tech/nevets/vplus/mixin/ZoomMixin.java b/src/main/java/tech/nevets/vplus/mixin/ZoomMixin.java
new file mode 100644
index 0000000..e6f5357
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/mixin/ZoomMixin.java
@@ -0,0 +1,2 @@
+package tech.nevets.vplus.mixin;public class ZoomMixin {
+}
diff --git a/src/main/java/tech/nevets/vplus/tools/AxeBase.java b/src/main/java/tech/nevets/vplus/tools/AxeBase.java
new file mode 100644
index 0000000..fd9dad5
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/tools/AxeBase.java
@@ -0,0 +1,11 @@
+package tech.nevets.vplus.tools;
+
+import net.minecraft.item.AxeItem;
+import net.minecraft.item.ToolMaterial;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class AxeBase extends AxeItem {
+ public AxeBase(ToolMaterial toolMaterial_1) {
+ super(toolMaterial_1, 5, -3.0f, new Settings().group(VPItemGroups.TOOLS));
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/tools/HoeBase.java b/src/main/java/tech/nevets/vplus/tools/HoeBase.java
new file mode 100644
index 0000000..22d2ea4
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/tools/HoeBase.java
@@ -0,0 +1,11 @@
+package tech.nevets.vplus.tools;
+
+import net.minecraft.item.HoeItem;
+import net.minecraft.item.ToolMaterial;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class HoeBase extends HoeItem {
+ public HoeBase(ToolMaterial toolMaterial_1) {
+ super(toolMaterial_1, -3, 0f, new Settings().group(VPItemGroups.TOOLS));
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/tools/PickaxeBase.java b/src/main/java/tech/nevets/vplus/tools/PickaxeBase.java
new file mode 100644
index 0000000..e39d003
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/tools/PickaxeBase.java
@@ -0,0 +1,11 @@
+package tech.nevets.vplus.tools;
+
+import net.minecraft.item.PickaxeItem;
+import net.minecraft.item.ToolMaterial;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class PickaxeBase extends PickaxeItem {
+ public PickaxeBase(ToolMaterial toolMaterial_1) {
+ super(toolMaterial_1, 1, -2.8f, new Settings().group(VPItemGroups.TOOLS));
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/tools/ShovelBase.java b/src/main/java/tech/nevets/vplus/tools/ShovelBase.java
new file mode 100644
index 0000000..68f41ce
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/tools/ShovelBase.java
@@ -0,0 +1,11 @@
+package tech.nevets.vplus.tools;
+
+import net.minecraft.item.ShovelItem;
+import net.minecraft.item.ToolMaterial;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class ShovelBase extends ShovelItem {
+ public ShovelBase(ToolMaterial toolMaterial_1) {
+ super(toolMaterial_1, 1, -3f, new Settings().group(VPItemGroups.TOOLS));
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/tools/SwordBase.java b/src/main/java/tech/nevets/vplus/tools/SwordBase.java
new file mode 100644
index 0000000..79e9b70
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/tools/SwordBase.java
@@ -0,0 +1,11 @@
+package tech.nevets.vplus.tools;
+
+import net.minecraft.item.SwordItem;
+import net.minecraft.item.ToolMaterial;
+import tech.nevets.vplus.items.VPItemGroups;
+
+public class SwordBase extends SwordItem {
+ public SwordBase(ToolMaterial toolMaterial_1) {
+ super(toolMaterial_1, 2, -2.4f, new Settings().group(VPItemGroups.COMBAT));
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/tools/ToolMaterials.java b/src/main/java/tech/nevets/vplus/tools/ToolMaterials.java
new file mode 100644
index 0000000..7d1427e
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/tools/ToolMaterials.java
@@ -0,0 +1,60 @@
+package tech.nevets.vplus.tools;
+
+import java.util.function.Supplier;
+import net.minecraft.item.ItemConvertible;
+import net.minecraft.item.Items;
+import net.minecraft.item.ToolMaterial;
+import net.minecraft.recipe.Ingredient;
+import net.minecraft.util.Lazy;
+import tech.nevets.vplus.items.VPItems;
+
+public enum ToolMaterials implements ToolMaterial {
+ EMERALD(3, 750, 7.0F, 4.0F, 30, () -> {
+ return Ingredient.ofItems(new ItemConvertible[]{Items.EMERALD});
+ }),
+ PLATINUM(4, 3000, 10.0F, 6.0F, 40, () -> {
+ return Ingredient.ofItems(new ItemConvertible[]{VPItems.PLATINUMINGOT});
+ }),
+ RUBY(4, 5000, 12.0F, 10.0F, 100, () -> {
+ return Ingredient.ofItems(new ItemConvertible[]{VPItems.RUBY});
+ });
+
+ private final int miningLevel;
+ private final int itemDurability;
+ private final float miningSpeed;
+ private final float attackDamage;
+ private final int enchantability;
+ private final Lazy repairIngredient;
+ private ToolMaterials(int miningLevel, int itemDurability, float miningSpeed, float attackDamage, int enchantability, Supplier repairIngredient) {
+ this.miningLevel = miningLevel;
+ this.itemDurability = itemDurability;
+ this.miningSpeed = miningSpeed;
+ this.attackDamage = attackDamage;
+ this.enchantability = enchantability;
+ this.repairIngredient = new Lazy(repairIngredient);
+ }
+
+ public int getDurability() {
+ return this.itemDurability;
+ }
+
+ public float getMiningSpeedMultiplier() {
+ return this.miningSpeed;
+ }
+
+ public float getAttackDamage() {
+ return this.attackDamage;
+ }
+
+ public int getMiningLevel() {
+ return this.miningLevel;
+ }
+
+ public int getEnchantability() {
+ return this.enchantability;
+ }
+
+ public Ingredient getRepairIngredient() {
+ return (Ingredient)this.repairIngredient.get();
+ }
+}
diff --git a/src/main/java/tech/nevets/vplus/tools/VPTools.java b/src/main/java/tech/nevets/vplus/tools/VPTools.java
new file mode 100644
index 0000000..5ee97d4
--- /dev/null
+++ b/src/main/java/tech/nevets/vplus/tools/VPTools.java
@@ -0,0 +1,45 @@
+package tech.nevets.vplus.tools;
+
+import net.minecraft.util.Identifier;
+import net.minecraft.util.registry.Registry;
+
+public class VPTools {
+
+ public static void vpTools() {
+ initializeAxes();
+ initializeHoes();
+ initializePickaxes();
+ initializeShovels();
+ initializeSwords();
+ }
+
+ public static void initializeAxes() {
+ Registry.register(Registry.ITEM, new Identifier("vplus", "emerald_axe"), new AxeBase(ToolMaterials.EMERALD));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_axe"), new AxeBase(ToolMaterials.PLATINUM));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "ruby_axe"), new AxeBase(ToolMaterials.RUBY));
+ }
+
+ public static void initializeHoes() {
+ Registry.register(Registry.ITEM, new Identifier("vplus", "emerald_hoe"), new HoeBase(ToolMaterials.EMERALD));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_hoe"), new HoeBase(ToolMaterials.PLATINUM));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "ruby_hoe"), new HoeBase(ToolMaterials.RUBY));
+ }
+
+ public static void initializePickaxes() {
+ Registry.register(Registry.ITEM, new Identifier("vplus", "emerald_pickaxe"), new PickaxeBase(ToolMaterials.EMERALD));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_pickaxe"), new PickaxeBase(ToolMaterials.PLATINUM));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "ruby_pickaxe"), new PickaxeBase(ToolMaterials.RUBY));
+ }
+
+ public static void initializeShovels() {
+ Registry.register(Registry.ITEM, new Identifier("vplus", "emerald_shovel"), new ShovelBase(ToolMaterials.EMERALD));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_shovel"), new ShovelBase(ToolMaterials.PLATINUM));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "ruby_shovel"), new ShovelBase(ToolMaterials.RUBY));
+ }
+
+ public static void initializeSwords() {
+ Registry.register(Registry.ITEM, new Identifier("vplus", "emerald_sword"), new SwordBase(ToolMaterials.EMERALD));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "platinum_sword"), new SwordBase(ToolMaterials.PLATINUM));
+ Registry.register(Registry.ITEM, new Identifier("vplus", "ruby_sword"), new SwordBase(ToolMaterials.RUBY));
+ }
+}
diff --git a/src/main/resources/assets/minecraft/textures/models/armor/emerald_layer_1.png b/src/main/resources/assets/minecraft/textures/models/armor/emerald_layer_1.png
new file mode 100644
index 0000000..68dc351
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/models/armor/emerald_layer_1.png differ
diff --git a/src/main/resources/assets/minecraft/textures/models/armor/emerald_layer_2.png b/src/main/resources/assets/minecraft/textures/models/armor/emerald_layer_2.png
new file mode 100644
index 0000000..872594b
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/models/armor/emerald_layer_2.png differ
diff --git a/src/main/resources/assets/minecraft/textures/models/armor/platinum_layer_1.png b/src/main/resources/assets/minecraft/textures/models/armor/platinum_layer_1.png
new file mode 100644
index 0000000..7622722
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/models/armor/platinum_layer_1.png differ
diff --git a/src/main/resources/assets/minecraft/textures/models/armor/platinum_layer_2.png b/src/main/resources/assets/minecraft/textures/models/armor/platinum_layer_2.png
new file mode 100644
index 0000000..b7ca994
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/models/armor/platinum_layer_2.png differ
diff --git a/src/main/resources/assets/vplus/blockstates/green_wall_torch.json b/src/main/resources/assets/vplus/blockstates/green_wall_torch.json
new file mode 100644
index 0000000..7314344
--- /dev/null
+++ b/src/main/resources/assets/vplus/blockstates/green_wall_torch.json
@@ -0,0 +1,19 @@
+{
+ "variants": {
+ "facing=east": {
+ "model": "minecraft:block/wall_torch"
+ },
+ "facing=north": {
+ "model": "minecraft:block/wall_torch",
+ "y": 270
+ },
+ "facing=south": {
+ "model": "minecraft:block/wall_torch",
+ "y": 90
+ },
+ "facing=west": {
+ "model": "minecraft:block/wall_torch",
+ "y": 180
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/blockstates/greentorch.json b/src/main/resources/assets/vplus/blockstates/greentorch.json
new file mode 100644
index 0000000..7d14911
--- /dev/null
+++ b/src/main/resources/assets/vplus/blockstates/greentorch.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "minecraft:block/torch"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/blockstates/lava_sponge.json b/src/main/resources/assets/vplus/blockstates/lava_sponge.json
new file mode 100644
index 0000000..8c743f7
--- /dev/null
+++ b/src/main/resources/assets/vplus/blockstates/lava_sponge.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "vplus:block/lava_sponge"}
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/blockstates/platinum_block.json b/src/main/resources/assets/vplus/blockstates/platinum_block.json
new file mode 100644
index 0000000..82824d2
--- /dev/null
+++ b/src/main/resources/assets/vplus/blockstates/platinum_block.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "vplus:block/platinum_block"}
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/blockstates/platinum_ore.json b/src/main/resources/assets/vplus/blockstates/platinum_ore.json
new file mode 100644
index 0000000..b3f6335
--- /dev/null
+++ b/src/main/resources/assets/vplus/blockstates/platinum_ore.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "vplus:block/platinum_ore"}
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/blockstates/ruby_block.json b/src/main/resources/assets/vplus/blockstates/ruby_block.json
new file mode 100644
index 0000000..887ea9e
--- /dev/null
+++ b/src/main/resources/assets/vplus/blockstates/ruby_block.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "vplus:block/ruby_block"}
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/blockstates/ruby_ore.json b/src/main/resources/assets/vplus/blockstates/ruby_ore.json
new file mode 100644
index 0000000..4d905ee
--- /dev/null
+++ b/src/main/resources/assets/vplus/blockstates/ruby_ore.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "vplus:block/ruby_ore"}
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/blockstates/saturated_lava_sponge.json b/src/main/resources/assets/vplus/blockstates/saturated_lava_sponge.json
new file mode 100644
index 0000000..5625d4c
--- /dev/null
+++ b/src/main/resources/assets/vplus/blockstates/saturated_lava_sponge.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "vplus:block/saturated_lava_sponge"}
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/icon.png b/src/main/resources/assets/vplus/icon.png
new file mode 100644
index 0000000..2ba3324
Binary files /dev/null and b/src/main/resources/assets/vplus/icon.png differ
diff --git a/src/main/resources/assets/vplus/lang/en_us.json b/src/main/resources/assets/vplus/lang/en_us.json
new file mode 100644
index 0000000..e2e8bab
--- /dev/null
+++ b/src/main/resources/assets/vplus/lang/en_us.json
@@ -0,0 +1,63 @@
+{
+ "key.vplus.zoom": "Zoom Key",
+ "category.vplus.zoom": "Zoom",
+
+ "itemGroup.vplus.all": "All",
+ "itemGroup.vplus.combat": "Combat",
+ "itemGroup.vplus.tools": "Tools",
+ "itemGroup.vplus.food": "Food",
+
+ "block.vplus.lava_sponge": "Lava Sponge",
+ "block.vplus.saturated_lava_sponge": "Saturated Lava Sponge",
+ "block.vplus.platinum_ore": "Platinum Ore",
+ "block.vplus.platinum_block": "Platinum Block",
+ "block.vplus.ruby_ore": "Ruby Ore",
+ "block.vplus.ruby_block": "Ruby Block",
+
+ "item.vplus.platinum_ingot": "Platinum Ingot",
+ "item.vplus.platinum_nugget": "Platinum Nugget",
+ "item.vplus.ruby": "Ruby",
+
+ "item.vplus.emerald_sword": "Emerald Sword",
+ "item.vplus.platinum_sword": "Platinum Sword",
+ "item.vplus.ruby_sword": "Ruby Sword",
+
+ "item.vplus.emerald_helmet": "Emerald Helmet",
+ "item.vplus.emerald_chestplate": "Emerald Chestplate",
+ "item.vplus.emerald_leggings": "Emerald Leggings",
+ "item.vplus.emerald_boots": "Emerald Boots",
+ "item.vplus.platinum_helmet": "Platinum Helmet",
+ "item.vplus.platinum_chestplate": "Platinum Chestplate",
+ "item.vplus.platinum_leggings": "Platinum Leggings",
+ "item.vplus.platinum_boots": "Platinum Boots",
+ "item.vplus.ruby_helmet": "Ruby Helmet",
+ "item.vplus.ruby_chestplate": "Ruby Chestplate",
+ "item.vplus.ruby_leggings": "Ruby Leggings",
+ "item.vplus.ruby_boots": "Ruby Boots",
+
+ "item.vplus.emerald_pickaxe": "Emerald Pickaxe",
+ "item.vplus.emerald_axe": "Emerald Axe",
+ "item.vplus.emerald_shovel": "Emerald Shovel",
+ "item.vplus.emerald_hoe": "Emerald Hoe",
+ "item.vplus.platinum_pickaxe": "Platinum Pickaxe",
+ "item.vplus.platinum_axe": "Platinum Axe",
+ "item.vplus.platinum_shovel": "Platinum Shovel",
+ "item.vplus.platinum_hoe": "Platinum Hoe",
+ "item.vplus.ruby_pickaxe": "Ruby Pickaxe",
+ "item.vplus.ruby_axe": "Ruby Axe",
+ "item.vplus.ruby_shovel": "Ruby Shovel",
+ "item.vplus.ruby_hoe": "Ruby Hoe",
+
+ "item.vplus.iron_apple": "Iron Apple",
+ "item.vplus.enchanted_iron_apple": "Enchanted Iron Apple",
+ "item.vplus.diamond_apple": "Diamond Apple",
+ "item.vplus.enchanted_diamond_apple": "Enchanted Diamond Apple",
+ "item.vplus.emerald_apple": "Emerald Apple",
+ "item.vplus.enchanted_emerald_apple": "Enchanted Emerald Apple",
+ "item.vplus.netherite_apple": "Netherite Apple",
+ "item.vplus.enchanted_Netherite_apple": "Enchanted Netherite Apple",
+ "item.vplus.platinum_apple": "Platinum Apple",
+ "item.vplus.enchanted_platinum_apple": "Enchanted Platinum Apple",
+ "item.vplus.ruby_apple": "Ruby Apple",
+ "item.vplus.enchanted_ruby_apple": "Enchanted Ruby Apple"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/block/green_wall_torch.json b/src/main/resources/assets/vplus/models/block/green_wall_torch.json
new file mode 100644
index 0000000..e30eec7
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/block/green_wall_torch.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_torch_wall",
+ "textures": {
+ "torch": "minecraft:block/torch"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/block/greentorch.json b/src/main/resources/assets/vplus/models/block/greentorch.json
new file mode 100644
index 0000000..7c6241d
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/block/greentorch.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_torch",
+ "textures": {
+ "torch": "minecraft:block/torch"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/block/lava_sponge.json b/src/main/resources/assets/vplus/models/block/lava_sponge.json
new file mode 100644
index 0000000..09972bc
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/block/lava_sponge.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "vplus:block/lava_sponge"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/block/platinum_block.json b/src/main/resources/assets/vplus/models/block/platinum_block.json
new file mode 100644
index 0000000..868204b
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/block/platinum_block.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "vplus:block/platinum_block"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/block/platinum_ore.json b/src/main/resources/assets/vplus/models/block/platinum_ore.json
new file mode 100644
index 0000000..1d38e84
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/block/platinum_ore.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "vplus:block/platinum_ore"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/block/ruby_block.json b/src/main/resources/assets/vplus/models/block/ruby_block.json
new file mode 100644
index 0000000..1211608
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/block/ruby_block.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "vplus:block/ruby_block"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/block/ruby_ore.json b/src/main/resources/assets/vplus/models/block/ruby_ore.json
new file mode 100644
index 0000000..48f4832
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/block/ruby_ore.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "vplus:block/ruby_ore"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/block/saturated_lava_sponge.json b/src/main/resources/assets/vplus/models/block/saturated_lava_sponge.json
new file mode 100644
index 0000000..68677d0
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/block/saturated_lava_sponge.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "vplus:block/saturated_lava_sponge"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/diamond_apple.json b/src/main/resources/assets/vplus/models/item/diamond_apple.json
new file mode 100644
index 0000000..8e9d888
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/diamond_apple.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/diamond_apple"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/emerald_apple.json b/src/main/resources/assets/vplus/models/item/emerald_apple.json
new file mode 100644
index 0000000..ad59b3f
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/emerald_apple.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/emerald_apple"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/emerald_axe.json b/src/main/resources/assets/vplus/models/item/emerald_axe.json
new file mode 100644
index 0000000..e01854f
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/emerald_axe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/emerald_axe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/emerald_boots.json b/src/main/resources/assets/vplus/models/item/emerald_boots.json
new file mode 100644
index 0000000..fbf4bc2
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/emerald_boots.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/emerald_boots"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/emerald_chestplate.json b/src/main/resources/assets/vplus/models/item/emerald_chestplate.json
new file mode 100644
index 0000000..01d77f3
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/emerald_chestplate.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/emerald_chestplate"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/emerald_helmet.json b/src/main/resources/assets/vplus/models/item/emerald_helmet.json
new file mode 100644
index 0000000..1f7fb84
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/emerald_helmet.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/emerald_helmet"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/emerald_hoe.json b/src/main/resources/assets/vplus/models/item/emerald_hoe.json
new file mode 100644
index 0000000..b0e979d
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/emerald_hoe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/emerald_hoe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/emerald_leggings.json b/src/main/resources/assets/vplus/models/item/emerald_leggings.json
new file mode 100644
index 0000000..733a6a8
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/emerald_leggings.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/emerald_leggings"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/emerald_pickaxe.json b/src/main/resources/assets/vplus/models/item/emerald_pickaxe.json
new file mode 100644
index 0000000..d6a2368
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/emerald_pickaxe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/emerald_pickaxe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/emerald_shovel.json b/src/main/resources/assets/vplus/models/item/emerald_shovel.json
new file mode 100644
index 0000000..3449de3
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/emerald_shovel.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/emerald_shovel"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/emerald_sword.json b/src/main/resources/assets/vplus/models/item/emerald_sword.json
new file mode 100644
index 0000000..4999cc5
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/emerald_sword.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/emerald_sword"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/enchanted_diamond_apple.json b/src/main/resources/assets/vplus/models/item/enchanted_diamond_apple.json
new file mode 100644
index 0000000..a9d57f8
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/enchanted_diamond_apple.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/enchanted_diamond_apple"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/enchanted_emerald_apple.json b/src/main/resources/assets/vplus/models/item/enchanted_emerald_apple.json
new file mode 100644
index 0000000..d55f9f5
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/enchanted_emerald_apple.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/enchanted_emerald_apple"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/enchanted_iron_apple.json b/src/main/resources/assets/vplus/models/item/enchanted_iron_apple.json
new file mode 100644
index 0000000..3129501
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/enchanted_iron_apple.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/enchanted_iron_apple"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/enchanted_netherite_apple.json b/src/main/resources/assets/vplus/models/item/enchanted_netherite_apple.json
new file mode 100644
index 0000000..35777a4
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/enchanted_netherite_apple.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/enchanted_netherite_apple"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/enchanted_platinum_apple.json b/src/main/resources/assets/vplus/models/item/enchanted_platinum_apple.json
new file mode 100644
index 0000000..090f560
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/enchanted_platinum_apple.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/enchanted_platinum_apple"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/enchanted_ruby_apple.json b/src/main/resources/assets/vplus/models/item/enchanted_ruby_apple.json
new file mode 100644
index 0000000..a162caa
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/enchanted_ruby_apple.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/enchanted_ruby_apple"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/greentorch.json b/src/main/resources/assets/vplus/models/item/greentorch.json
new file mode 100644
index 0000000..a734b43
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/greentorch.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "minecraft:block/torch"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/iron_apple.json b/src/main/resources/assets/vplus/models/item/iron_apple.json
new file mode 100644
index 0000000..a5f9139
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/iron_apple.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/iron_apple"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/lava_sponge.json b/src/main/resources/assets/vplus/models/item/lava_sponge.json
new file mode 100644
index 0000000..299ab5d
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/lava_sponge.json
@@ -0,0 +1,3 @@
+{
+ "parent": "vplus:block/lava_sponge"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/netherite_apple.json b/src/main/resources/assets/vplus/models/item/netherite_apple.json
new file mode 100644
index 0000000..a139f0e
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/netherite_apple.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/netherite_apple"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_apple.json b/src/main/resources/assets/vplus/models/item/platinum_apple.json
new file mode 100644
index 0000000..54e814a
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_apple.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/platinum_apple"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_axe.json b/src/main/resources/assets/vplus/models/item/platinum_axe.json
new file mode 100644
index 0000000..2790b37
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_axe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/platinum_axe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_block.json b/src/main/resources/assets/vplus/models/item/platinum_block.json
new file mode 100644
index 0000000..7a4f5be
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_block.json
@@ -0,0 +1,3 @@
+{
+ "parent": "vplus:block/platinum_block"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_boots.json b/src/main/resources/assets/vplus/models/item/platinum_boots.json
new file mode 100644
index 0000000..a70a26f
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_boots.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/platinum_boots"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_chestplate.json b/src/main/resources/assets/vplus/models/item/platinum_chestplate.json
new file mode 100644
index 0000000..047cb70
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_chestplate.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/platinum_chestplate"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_helmet.json b/src/main/resources/assets/vplus/models/item/platinum_helmet.json
new file mode 100644
index 0000000..7b0af57
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_helmet.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/platinum_helmet"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_hoe.json b/src/main/resources/assets/vplus/models/item/platinum_hoe.json
new file mode 100644
index 0000000..e30f5da
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_hoe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/platinum_hoe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_ingot.json b/src/main/resources/assets/vplus/models/item/platinum_ingot.json
new file mode 100644
index 0000000..c238978
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_ingot.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/platinum_ingot"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_leggings.json b/src/main/resources/assets/vplus/models/item/platinum_leggings.json
new file mode 100644
index 0000000..f4b2123
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_leggings.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/platinum_leggings"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_nugget.json b/src/main/resources/assets/vplus/models/item/platinum_nugget.json
new file mode 100644
index 0000000..dab5529
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_nugget.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/platinum_nugget"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_ore.json b/src/main/resources/assets/vplus/models/item/platinum_ore.json
new file mode 100644
index 0000000..99577a5
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_ore.json
@@ -0,0 +1,3 @@
+{
+ "parent": "vplus:block/platinum_ore"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_pickaxe.json b/src/main/resources/assets/vplus/models/item/platinum_pickaxe.json
new file mode 100644
index 0000000..f72e58c
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_pickaxe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/platinum_pickaxe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_shovel.json b/src/main/resources/assets/vplus/models/item/platinum_shovel.json
new file mode 100644
index 0000000..b0aac55
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_shovel.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/platinum_shovel"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/platinum_sword.json b/src/main/resources/assets/vplus/models/item/platinum_sword.json
new file mode 100644
index 0000000..e9e5ca7
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/platinum_sword.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/platinum_sword"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/ruby.json b/src/main/resources/assets/vplus/models/item/ruby.json
new file mode 100644
index 0000000..d41d08a
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/ruby.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/ruby"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/ruby_apple.json b/src/main/resources/assets/vplus/models/item/ruby_apple.json
new file mode 100644
index 0000000..7209c52
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/ruby_apple.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/ruby_apple"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/ruby_axe.json b/src/main/resources/assets/vplus/models/item/ruby_axe.json
new file mode 100644
index 0000000..1e5c645
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/ruby_axe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/ruby_axe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/ruby_block.json b/src/main/resources/assets/vplus/models/item/ruby_block.json
new file mode 100644
index 0000000..cf5e781
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/ruby_block.json
@@ -0,0 +1,3 @@
+{
+ "parent": "vplus:block/ruby_block"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/ruby_boots.json b/src/main/resources/assets/vplus/models/item/ruby_boots.json
new file mode 100644
index 0000000..675db2f
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/ruby_boots.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/ruby_boots"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/ruby_chestplate.json b/src/main/resources/assets/vplus/models/item/ruby_chestplate.json
new file mode 100644
index 0000000..c46cb0d
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/ruby_chestplate.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/ruby_chestplate"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/ruby_helmet.json b/src/main/resources/assets/vplus/models/item/ruby_helmet.json
new file mode 100644
index 0000000..36b4d9c
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/ruby_helmet.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/ruby_helmet"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/ruby_hoe.json b/src/main/resources/assets/vplus/models/item/ruby_hoe.json
new file mode 100644
index 0000000..7de3bea
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/ruby_hoe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/ruby_hoe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/ruby_leggings.json b/src/main/resources/assets/vplus/models/item/ruby_leggings.json
new file mode 100644
index 0000000..a481ff3
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/ruby_leggings.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "vplus:item/ruby_leggings"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/ruby_ore.json b/src/main/resources/assets/vplus/models/item/ruby_ore.json
new file mode 100644
index 0000000..b30e8a6
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/ruby_ore.json
@@ -0,0 +1,3 @@
+{
+ "parent": "vplus:block/ruby_ore"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/ruby_pickaxe.json b/src/main/resources/assets/vplus/models/item/ruby_pickaxe.json
new file mode 100644
index 0000000..64bebaa
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/ruby_pickaxe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/ruby_pickaxe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/ruby_shovel.json b/src/main/resources/assets/vplus/models/item/ruby_shovel.json
new file mode 100644
index 0000000..e42c792
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/ruby_shovel.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/ruby_shovel"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/ruby_sword.json b/src/main/resources/assets/vplus/models/item/ruby_sword.json
new file mode 100644
index 0000000..5e2df43
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/ruby_sword.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/handheld",
+ "textures": {
+ "layer0": "vplus:item/ruby_sword"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/models/item/saturated_lava_sponge.json b/src/main/resources/assets/vplus/models/item/saturated_lava_sponge.json
new file mode 100644
index 0000000..b101c14
--- /dev/null
+++ b/src/main/resources/assets/vplus/models/item/saturated_lava_sponge.json
@@ -0,0 +1,3 @@
+{
+ "parent": "vplus:block/saturated_lava_sponge"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/vplus/textures/block/greentorch.png b/src/main/resources/assets/vplus/textures/block/greentorch.png
new file mode 100644
index 0000000..14bd2d7
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/block/greentorch.png differ
diff --git a/src/main/resources/assets/vplus/textures/block/lava_sponge.png b/src/main/resources/assets/vplus/textures/block/lava_sponge.png
new file mode 100644
index 0000000..5bcc621
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/block/lava_sponge.png differ
diff --git a/src/main/resources/assets/vplus/textures/block/platinum_block.png b/src/main/resources/assets/vplus/textures/block/platinum_block.png
new file mode 100644
index 0000000..e3fcec2
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/block/platinum_block.png differ
diff --git a/src/main/resources/assets/vplus/textures/block/platinum_ore.png b/src/main/resources/assets/vplus/textures/block/platinum_ore.png
new file mode 100644
index 0000000..4fa5a36
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/block/platinum_ore.png differ
diff --git a/src/main/resources/assets/vplus/textures/block/ruby_block.png b/src/main/resources/assets/vplus/textures/block/ruby_block.png
new file mode 100644
index 0000000..5110aeb
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/block/ruby_block.png differ
diff --git a/src/main/resources/assets/vplus/textures/block/ruby_ore.png b/src/main/resources/assets/vplus/textures/block/ruby_ore.png
new file mode 100644
index 0000000..6f908d0
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/block/ruby_ore.png differ
diff --git a/src/main/resources/assets/vplus/textures/block/saturated_lava_sponge.png b/src/main/resources/assets/vplus/textures/block/saturated_lava_sponge.png
new file mode 100644
index 0000000..2a8fda6
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/block/saturated_lava_sponge.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/diamond_apple.png b/src/main/resources/assets/vplus/textures/item/diamond_apple.png
new file mode 100644
index 0000000..2f22b54
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/diamond_apple.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/emerald_apple.png b/src/main/resources/assets/vplus/textures/item/emerald_apple.png
new file mode 100644
index 0000000..1aff98d
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/emerald_apple.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/emerald_axe.png b/src/main/resources/assets/vplus/textures/item/emerald_axe.png
new file mode 100644
index 0000000..8a28156
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/emerald_axe.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/emerald_boots.png b/src/main/resources/assets/vplus/textures/item/emerald_boots.png
new file mode 100644
index 0000000..7ad9097
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/emerald_boots.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/emerald_chestplate.png b/src/main/resources/assets/vplus/textures/item/emerald_chestplate.png
new file mode 100644
index 0000000..4a59af5
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/emerald_chestplate.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/emerald_helmet.png b/src/main/resources/assets/vplus/textures/item/emerald_helmet.png
new file mode 100644
index 0000000..b217c8e
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/emerald_helmet.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/emerald_hoe.png b/src/main/resources/assets/vplus/textures/item/emerald_hoe.png
new file mode 100644
index 0000000..4decacb
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/emerald_hoe.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/emerald_leggings.png b/src/main/resources/assets/vplus/textures/item/emerald_leggings.png
new file mode 100644
index 0000000..b4b08fb
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/emerald_leggings.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/emerald_pickaxe.png b/src/main/resources/assets/vplus/textures/item/emerald_pickaxe.png
new file mode 100644
index 0000000..69f459e
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/emerald_pickaxe.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/emerald_shovel.png b/src/main/resources/assets/vplus/textures/item/emerald_shovel.png
new file mode 100644
index 0000000..cf2d738
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/emerald_shovel.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/emerald_sword.png b/src/main/resources/assets/vplus/textures/item/emerald_sword.png
new file mode 100644
index 0000000..103e51f
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/emerald_sword.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/enchanted_diamond_apple.png b/src/main/resources/assets/vplus/textures/item/enchanted_diamond_apple.png
new file mode 100644
index 0000000..8200e18
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/enchanted_diamond_apple.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/enchanted_emerald_apple.png b/src/main/resources/assets/vplus/textures/item/enchanted_emerald_apple.png
new file mode 100644
index 0000000..076454f
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/enchanted_emerald_apple.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/enchanted_iron_apple.png b/src/main/resources/assets/vplus/textures/item/enchanted_iron_apple.png
new file mode 100644
index 0000000..c26b11d
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/enchanted_iron_apple.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/enchanted_netherite_apple.png b/src/main/resources/assets/vplus/textures/item/enchanted_netherite_apple.png
new file mode 100644
index 0000000..4878cf9
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/enchanted_netherite_apple.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/enchanted_platinum_apple.png b/src/main/resources/assets/vplus/textures/item/enchanted_platinum_apple.png
new file mode 100644
index 0000000..cb85bd8
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/enchanted_platinum_apple.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/enchanted_ruby_apple.png b/src/main/resources/assets/vplus/textures/item/enchanted_ruby_apple.png
new file mode 100644
index 0000000..3ee2b88
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/enchanted_ruby_apple.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/iron_apple.png b/src/main/resources/assets/vplus/textures/item/iron_apple.png
new file mode 100644
index 0000000..609a278
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/iron_apple.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/netherite_apple.png b/src/main/resources/assets/vplus/textures/item/netherite_apple.png
new file mode 100644
index 0000000..4edfd97
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/netherite_apple.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/platinum_apple.png b/src/main/resources/assets/vplus/textures/item/platinum_apple.png
new file mode 100644
index 0000000..82be198
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/platinum_apple.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/platinum_axe.png b/src/main/resources/assets/vplus/textures/item/platinum_axe.png
new file mode 100644
index 0000000..f8bd462
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/platinum_axe.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/platinum_boots.png b/src/main/resources/assets/vplus/textures/item/platinum_boots.png
new file mode 100644
index 0000000..a4f07b9
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/platinum_boots.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/platinum_chestplate.png b/src/main/resources/assets/vplus/textures/item/platinum_chestplate.png
new file mode 100644
index 0000000..27d33ec
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/platinum_chestplate.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/platinum_helmet.png b/src/main/resources/assets/vplus/textures/item/platinum_helmet.png
new file mode 100644
index 0000000..b89035b
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/platinum_helmet.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/platinum_hoe.png b/src/main/resources/assets/vplus/textures/item/platinum_hoe.png
new file mode 100644
index 0000000..56a8148
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/platinum_hoe.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/platinum_ingot.png b/src/main/resources/assets/vplus/textures/item/platinum_ingot.png
new file mode 100644
index 0000000..41173db
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/platinum_ingot.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/platinum_leggings.png b/src/main/resources/assets/vplus/textures/item/platinum_leggings.png
new file mode 100644
index 0000000..eab4c63
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/platinum_leggings.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/platinum_nugget.png b/src/main/resources/assets/vplus/textures/item/platinum_nugget.png
new file mode 100644
index 0000000..cfd9f8a
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/platinum_nugget.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/platinum_pickaxe.png b/src/main/resources/assets/vplus/textures/item/platinum_pickaxe.png
new file mode 100644
index 0000000..c97b03f
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/platinum_pickaxe.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/platinum_shovel.png b/src/main/resources/assets/vplus/textures/item/platinum_shovel.png
new file mode 100644
index 0000000..306a85d
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/platinum_shovel.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/platinum_sword.png b/src/main/resources/assets/vplus/textures/item/platinum_sword.png
new file mode 100644
index 0000000..bb21852
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/platinum_sword.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/ruby.png b/src/main/resources/assets/vplus/textures/item/ruby.png
new file mode 100644
index 0000000..4f288d9
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/ruby.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/ruby_apple.png b/src/main/resources/assets/vplus/textures/item/ruby_apple.png
new file mode 100644
index 0000000..3ee2b88
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/ruby_apple.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/ruby_axe.png b/src/main/resources/assets/vplus/textures/item/ruby_axe.png
new file mode 100644
index 0000000..fd32f31
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/ruby_axe.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/ruby_boots.png b/src/main/resources/assets/vplus/textures/item/ruby_boots.png
new file mode 100644
index 0000000..db3248e
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/ruby_boots.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/ruby_chestplate.png b/src/main/resources/assets/vplus/textures/item/ruby_chestplate.png
new file mode 100644
index 0000000..bf20e19
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/ruby_chestplate.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/ruby_helmet.png b/src/main/resources/assets/vplus/textures/item/ruby_helmet.png
new file mode 100644
index 0000000..7364fbb
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/ruby_helmet.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/ruby_hoe.png b/src/main/resources/assets/vplus/textures/item/ruby_hoe.png
new file mode 100644
index 0000000..60dcd28
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/ruby_hoe.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/ruby_leggings.png b/src/main/resources/assets/vplus/textures/item/ruby_leggings.png
new file mode 100644
index 0000000..23ca18e
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/ruby_leggings.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/ruby_pickaxe.png b/src/main/resources/assets/vplus/textures/item/ruby_pickaxe.png
new file mode 100644
index 0000000..b5124b8
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/ruby_pickaxe.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/ruby_shovel.png b/src/main/resources/assets/vplus/textures/item/ruby_shovel.png
new file mode 100644
index 0000000..a745850
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/ruby_shovel.png differ
diff --git a/src/main/resources/assets/vplus/textures/item/ruby_sword.png b/src/main/resources/assets/vplus/textures/item/ruby_sword.png
new file mode 100644
index 0000000..9c6b7cc
Binary files /dev/null and b/src/main/resources/assets/vplus/textures/item/ruby_sword.png differ
diff --git a/src/main/resources/data/minecraft/recipes/chainmail_boots.json b/src/main/resources/data/minecraft/recipes/chainmail_boots.json
new file mode 100644
index 0000000..fc9ad6e
--- /dev/null
+++ b/src/main/resources/data/minecraft/recipes/chainmail_boots.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "# #",
+ "# #"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:chain"
+ }
+ },
+ "result": {
+ "item": "minecraft:chainmail_boots",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/recipes/chainmail_chestplate.json b/src/main/resources/data/minecraft/recipes/chainmail_chestplate.json
new file mode 100644
index 0000000..444b3a7
--- /dev/null
+++ b/src/main/resources/data/minecraft/recipes/chainmail_chestplate.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "# #",
+ "###",
+ "###"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:chain"
+ }
+ },
+ "result": {
+ "item": "minecraft:chainmail_chestplate",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/recipes/chainmail_helmet.json b/src/main/resources/data/minecraft/recipes/chainmail_helmet.json
new file mode 100644
index 0000000..b78ce65
--- /dev/null
+++ b/src/main/resources/data/minecraft/recipes/chainmail_helmet.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ "# #"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:chain"
+ }
+ },
+ "result": {
+ "item": "minecraft:chainmail_helmet",
+ "count": 1
+ }
+}
diff --git a/src/main/resources/data/minecraft/recipes/chainmail_leggings.json b/src/main/resources/data/minecraft/recipes/chainmail_leggings.json
new file mode 100644
index 0000000..5d4ccac
--- /dev/null
+++ b/src/main/resources/data/minecraft/recipes/chainmail_leggings.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ "# #",
+ "# #"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:chain"
+ }
+ },
+ "result": {
+ "item": "minecraft:chainmail_leggings",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/recipes/enchanted_golden_apple.json b/src/main/resources/data/minecraft/recipes/enchanted_golden_apple.json
new file mode 100644
index 0000000..b4fbae1
--- /dev/null
+++ b/src/main/resources/data/minecraft/recipes/enchanted_golden_apple.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "iii",
+ "iAi",
+ "iii"
+ ],
+ "key": {
+ "i": {
+ "item": "minecraft:gold_block"
+ },
+ "A": {
+ "item": "minecraft:apple"
+ }
+ },
+ "result": {
+ "item": "minecraft:enchanted_golden_apple",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/tags/blocks/beacon_base_blocks.json b/src/main/resources/data/minecraft/tags/blocks/beacon_base_blocks.json
new file mode 100644
index 0000000..bd9f367
--- /dev/null
+++ b/src/main/resources/data/minecraft/tags/blocks/beacon_base_blocks.json
@@ -0,0 +1,7 @@
+{
+ "replace": false,
+ "values": [
+ "vplus:platinum_block",
+ "vplus:ruby_block"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/tags/items/beacon_payment_items.json b/src/main/resources/data/minecraft/tags/items/beacon_payment_items.json
new file mode 100644
index 0000000..1b887bd
--- /dev/null
+++ b/src/main/resources/data/minecraft/tags/items/beacon_payment_items.json
@@ -0,0 +1,7 @@
+{
+ "repalce": false,
+ "values": [
+ "vplus:platinum_ingot",
+ "vplus:ruby"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/loot_tables/blocks/lava_sponge.json b/src/main/resources/data/vplus/loot_tables/blocks/lava_sponge.json
new file mode 100644
index 0000000..4f07593
--- /dev/null
+++ b/src/main/resources/data/vplus/loot_tables/blocks/lava_sponge.json
@@ -0,0 +1,19 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "vplus:lava_sponge"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/loot_tables/blocks/platinum_block.json b/src/main/resources/data/vplus/loot_tables/blocks/platinum_block.json
new file mode 100644
index 0000000..ce305ac
--- /dev/null
+++ b/src/main/resources/data/vplus/loot_tables/blocks/platinum_block.json
@@ -0,0 +1,19 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "vplus:platinum_block"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/loot_tables/blocks/platinum_ore.json b/src/main/resources/data/vplus/loot_tables/blocks/platinum_ore.json
new file mode 100644
index 0000000..fb37983
--- /dev/null
+++ b/src/main/resources/data/vplus/loot_tables/blocks/platinum_ore.json
@@ -0,0 +1,56 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "vplus:platinum_ore"
+ },
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "function": "minecraft:set_count",
+ "count": {
+ "min": 3.0,
+ "max": 7.0,
+ "type": "minecraft:uniform"
+ }
+ },
+ {
+ "function": "minecraft:apply_bonus",
+ "enchantment": "minecraft:fortune",
+ "formula": "minecraft:uniform_bonus_count",
+ "parameters": {
+ "bonusMultiplier": 1
+ }
+ }
+ ],
+ "name": "vplus:platinum_nugget"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/loot_tables/blocks/ruby_block.json b/src/main/resources/data/vplus/loot_tables/blocks/ruby_block.json
new file mode 100644
index 0000000..3ef35ad
--- /dev/null
+++ b/src/main/resources/data/vplus/loot_tables/blocks/ruby_block.json
@@ -0,0 +1,19 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "vplus:ruby_block"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/loot_tables/blocks/ruby_ore.json b/src/main/resources/data/vplus/loot_tables/blocks/ruby_ore.json
new file mode 100644
index 0000000..496fed9
--- /dev/null
+++ b/src/main/resources/data/vplus/loot_tables/blocks/ruby_ore.json
@@ -0,0 +1,56 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "vplus:ruby_ore"
+ },
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "function": "minecraft:set_count",
+ "count": {
+ "min": 1.0,
+ "max": 1.0,
+ "type": "minecraft:uniform"
+ }
+ },
+ {
+ "function": "minecraft:apply_bonus",
+ "enchantment": "minecraft:fortune",
+ "formula": "minecraft:uniform_bonus_count",
+ "parameters": {
+ "bonusMultiplier": 1
+ }
+ }
+ ],
+ "name": "vplus:ruby"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/loot_tables/blocks/saturated_lava_sponge.json b/src/main/resources/data/vplus/loot_tables/blocks/saturated_lava_sponge.json
new file mode 100644
index 0000000..612ab18
--- /dev/null
+++ b/src/main/resources/data/vplus/loot_tables/blocks/saturated_lava_sponge.json
@@ -0,0 +1,19 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "vplus:saturated_lava_sponge"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/diamond_apple.json b/src/main/resources/data/vplus/recipes/diamond_apple.json
new file mode 100644
index 0000000..01d3741
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/diamond_apple.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "iii",
+ "iAi",
+ "iii"
+ ],
+ "key": {
+ "i": {
+ "item": "minecraft:diamond"
+ },
+ "A": {
+ "item": "minecraft:apple"
+ }
+ },
+ "result": {
+ "item": "vplus:diamond_apple",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/emerald_apple.json b/src/main/resources/data/vplus/recipes/emerald_apple.json
new file mode 100644
index 0000000..dbcadc3
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/emerald_apple.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "iii",
+ "iAi",
+ "iii"
+ ],
+ "key": {
+ "i": {
+ "item": "minecraft:emerald"
+ },
+ "A": {
+ "item": "minecraft:apple"
+ }
+ },
+ "result": {
+ "item": "vplus:emerald_apple",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/emerald_axe.json b/src/main/resources/data/vplus/recipes/emerald_axe.json
new file mode 100644
index 0000000..e063f82
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/emerald_axe.json
@@ -0,0 +1,19 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "XX",
+ "X#",
+ " #"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:stick"
+ },
+ "X": {
+ "item": "minecraft:emerald"
+ }
+ },
+ "result": {
+ "item": "vplus:emerald_axe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/emerald_boots.json b/src/main/resources/data/vplus/recipes/emerald_boots.json
new file mode 100644
index 0000000..08f8e72
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/emerald_boots.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "# #",
+ "# #"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:emerald"
+ }
+ },
+ "result": {
+ "item": "vplus:emerald_boots",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/emerald_chestplate.json b/src/main/resources/data/vplus/recipes/emerald_chestplate.json
new file mode 100644
index 0000000..dd63411
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/emerald_chestplate.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "# #",
+ "###",
+ "###"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:emerald"
+ }
+ },
+ "result": {
+ "item": "vplus:emerald_chestplate",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/emerald_helmet.json b/src/main/resources/data/vplus/recipes/emerald_helmet.json
new file mode 100644
index 0000000..a5d0ed4
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/emerald_helmet.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ "# #"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:emerald"
+ }
+ },
+ "result": {
+ "item": "vplus:emerald_helmet",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/emerald_hoe.json b/src/main/resources/data/vplus/recipes/emerald_hoe.json
new file mode 100644
index 0000000..06fe807
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/emerald_hoe.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "##",
+ " /",
+ " /"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:emerald"
+ },
+ "/": {
+ "item": "minecraft:stick"
+ }
+ },
+ "result": {
+ "item": "vplus:emerald_hoe",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/emerald_leggings.json b/src/main/resources/data/vplus/recipes/emerald_leggings.json
new file mode 100644
index 0000000..6aa1cf0
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/emerald_leggings.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ "# #",
+ "# #"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:emerald"
+ }
+ },
+ "result": {
+ "item": "vplus:emerald_leggings",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/emerald_pickaxe.json b/src/main/resources/data/vplus/recipes/emerald_pickaxe.json
new file mode 100644
index 0000000..0b4411e
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/emerald_pickaxe.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ " / ",
+ " / "
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:emerald"
+ },
+ "/": {
+ "item": "minecraft:stick"
+ }
+ },
+ "result": {
+ "item": "vplus:emerald_pickaxe",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/emerald_shovel.json b/src/main/resources/data/vplus/recipes/emerald_shovel.json
new file mode 100644
index 0000000..54acfc4
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/emerald_shovel.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "#",
+ "/",
+ "/"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:emerald"
+ },
+ "/": {
+ "item": "minecraft:stick"
+ }
+ },
+ "result": {
+ "item": "vplus:emerald_shovel",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/emerald_sword.json b/src/main/resources/data/vplus/recipes/emerald_sword.json
new file mode 100644
index 0000000..f11c878
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/emerald_sword.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "#",
+ "#",
+ "/"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:emerald"
+ },
+ "/": {
+ "item": "minecraft:stick"
+ }
+ },
+ "result": {
+ "item": "vplus:emerald_sword",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/enchanted_diamond_apple.json b/src/main/resources/data/vplus/recipes/enchanted_diamond_apple.json
new file mode 100644
index 0000000..06802c4
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/enchanted_diamond_apple.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "iii",
+ "iAi",
+ "iii"
+ ],
+ "key": {
+ "i": {
+ "item": "minecraft:diamond_block"
+ },
+ "A": {
+ "item": "minecraft:apple"
+ }
+ },
+ "result": {
+ "item": "vplus:enchanted_diamond_apple",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/enchanted_emerald_apple.json b/src/main/resources/data/vplus/recipes/enchanted_emerald_apple.json
new file mode 100644
index 0000000..f494bc2
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/enchanted_emerald_apple.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "iii",
+ "iAi",
+ "iii"
+ ],
+ "key": {
+ "i": {
+ "item": "minecraft:emerald_block"
+ },
+ "A": {
+ "item": "minecraft:apple"
+ }
+ },
+ "result": {
+ "item": "vplus:enchanted_emerald_apple",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/enchanted_iron_apple.json b/src/main/resources/data/vplus/recipes/enchanted_iron_apple.json
new file mode 100644
index 0000000..57f75dc
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/enchanted_iron_apple.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ "#A#",
+ "###"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:iron_block"
+ },
+ "A": {
+ "item": "minecraft:apple"
+ }
+ },
+ "result": {
+ "item": "vplus:enchanted_iron_apple",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/enchanted_netherite_apple.json b/src/main/resources/data/vplus/recipes/enchanted_netherite_apple.json
new file mode 100644
index 0000000..9eb4925
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/enchanted_netherite_apple.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "iii",
+ "iAi",
+ "iii"
+ ],
+ "key": {
+ "i": {
+ "item": "minecraft:netherite_block"
+ },
+ "A": {
+ "item": "minecraft:apple"
+ }
+ },
+ "result": {
+ "item": "vplus:enchanted_netherite_apple",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/enchanted_platinum_apple.json b/src/main/resources/data/vplus/recipes/enchanted_platinum_apple.json
new file mode 100644
index 0000000..3ecde69
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/enchanted_platinum_apple.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "iii",
+ "iAi",
+ "iii"
+ ],
+ "key": {
+ "i": {
+ "item": "vplus:platinum_block"
+ },
+ "A": {
+ "item": "minecraft:apple"
+ }
+ },
+ "result": {
+ "item": "vplus:enchanted_platinum_apple",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/iron_apple.json b/src/main/resources/data/vplus/recipes/iron_apple.json
new file mode 100644
index 0000000..119384c
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/iron_apple.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "iii",
+ "iAi",
+ "iii"
+ ],
+ "key": {
+ "i": {
+ "item": "minecraft:iron_ingot"
+ },
+ "A": {
+ "item": "minecraft:apple"
+ }
+ },
+ "result": {
+ "item": "vplus:iron_apple",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/lava_sponge.json b/src/main/resources/data/vplus/recipes/lava_sponge.json
new file mode 100644
index 0000000..f617b68
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/lava_sponge.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ "#S#",
+ "###"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:netherite_scrap"
+ },
+ "S": {
+ "item": "minecraft:sponge"
+ }
+ },
+ "result": {
+ "item": "vplus:lava_sponge",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/netherite_apple.json b/src/main/resources/data/vplus/recipes/netherite_apple.json
new file mode 100644
index 0000000..1f7ed08
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/netherite_apple.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "iii",
+ "iAi",
+ "iii"
+ ],
+ "key": {
+ "i": {
+ "item": "minecraft:netherite_ingot"
+ },
+ "A": {
+ "item": "minecraft:apple"
+ }
+ },
+ "result": {
+ "item": "vplus:netherite_apple",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_apple.json b/src/main/resources/data/vplus/recipes/platinum_apple.json
new file mode 100644
index 0000000..da25de0
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_apple.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "iii",
+ "iAi",
+ "iii"
+ ],
+ "key": {
+ "i": {
+ "item": "vplus:platinum_ingot"
+ },
+ "A": {
+ "item": "minecraft:apple"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_apple",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_axe.json b/src/main/resources/data/vplus/recipes/platinum_axe.json
new file mode 100644
index 0000000..9e5d6fb
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_axe.json
@@ -0,0 +1,19 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "XX",
+ "X#",
+ " #"
+ ],
+ "key": {
+ "#": {
+ "item": "minecraft:stick"
+ },
+ "X": {
+ "item": "vplus:platinum_ingot"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_axe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_axe_smithing.json b/src/main/resources/data/vplus/recipes/platinum_axe_smithing.json
new file mode 100644
index 0000000..cef03b6
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_axe_smithing.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:smithing",
+ "base": {
+ "item": "minecraft:netherite_axe"
+ },
+ "addition": {
+ "item": "vplus:platinum_ingot"
+ },
+ "result": {
+ "item": "vplus:platinum_axe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_block.json b/src/main/resources/data/vplus/recipes/platinum_block.json
new file mode 100644
index 0000000..7a4b74b
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_block.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ "###",
+ "###"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:platinum_ingot"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_block",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_boots.json b/src/main/resources/data/vplus/recipes/platinum_boots.json
new file mode 100644
index 0000000..a5834d5
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_boots.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "# #",
+ "# #"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:platinum_ingot"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_boots",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_boots_smithing.json b/src/main/resources/data/vplus/recipes/platinum_boots_smithing.json
new file mode 100644
index 0000000..96f8662
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_boots_smithing.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:smithing",
+ "base": {
+ "item": "minecraft:netherite_boots"
+ },
+ "addition": {
+ "item": "vplus:platinum_ingot"
+ },
+ "result": {
+ "item": "vplus:platinum_boots"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_chestplate.json b/src/main/resources/data/vplus/recipes/platinum_chestplate.json
new file mode 100644
index 0000000..c590ab0
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_chestplate.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "# #",
+ "###",
+ "###"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:platinum_ingot"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_chestplate",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_chestplate_smithing.json b/src/main/resources/data/vplus/recipes/platinum_chestplate_smithing.json
new file mode 100644
index 0000000..5907447
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_chestplate_smithing.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:smithing",
+ "base": {
+ "item": "minecraft:netherite_chestplate"
+ },
+ "addition": {
+ "item": "vplus:platinum_ingot"
+ },
+ "result": {
+ "item": "vplus:platinum_chestplate"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_helmet.json b/src/main/resources/data/vplus/recipes/platinum_helmet.json
new file mode 100644
index 0000000..4c4db72
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_helmet.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ "# #"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:platinum_ingot"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_helmet",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_helmet_smithing.json b/src/main/resources/data/vplus/recipes/platinum_helmet_smithing.json
new file mode 100644
index 0000000..326f913
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_helmet_smithing.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:smithing",
+ "base": {
+ "item": "minecraft:netherite_helmet"
+ },
+ "addition": {
+ "item": "vplus:platinum_ingot"
+ },
+ "result": {
+ "item": "vplus:platinum_helmet"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_hoe.json b/src/main/resources/data/vplus/recipes/platinum_hoe.json
new file mode 100644
index 0000000..8ab2ed1
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_hoe.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "##",
+ " /",
+ " /"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:platinum_ingot"
+ },
+ "/": {
+ "item": "minecraft:stick"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_hoe",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_hoe_smithing.json b/src/main/resources/data/vplus/recipes/platinum_hoe_smithing.json
new file mode 100644
index 0000000..4e82f10
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_hoe_smithing.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:smithing",
+ "base": {
+ "item": "minecraft:netherite_hoe"
+ },
+ "addition": {
+ "item": "vplus:platinum_ingot"
+ },
+ "result": {
+ "item": "vplus:platinum_hoe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_ingot.json b/src/main/resources/data/vplus/recipes/platinum_ingot.json
new file mode 100644
index 0000000..ecba660
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_ingot.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:smelting",
+ "ingredient": {
+ "item": "vplus:platinum_ore"
+ },
+ "result": "vplus:platinum_ingot",
+ "experience": 2.5,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_ingot_from_blasting.json b/src/main/resources/data/vplus/recipes/platinum_ingot_from_blasting.json
new file mode 100644
index 0000000..88c2479
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_ingot_from_blasting.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:blasting",
+ "ingredient": {
+ "item": "vplus:platinum_ore"
+ },
+ "result": "vplus:platinum_ingot",
+ "experience": 2.5,
+ "cookingtime": 100
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_ingot_from_block.json b/src/main/resources/data/vplus/recipes/platinum_ingot_from_block.json
new file mode 100644
index 0000000..8d7f854
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_ingot_from_block.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "#"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:platinum_block"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_ingot",
+ "count": 9
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_ingot_from_nuggets.json b/src/main/resources/data/vplus/recipes/platinum_ingot_from_nuggets.json
new file mode 100644
index 0000000..63759b0
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_ingot_from_nuggets.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ "###",
+ "###"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:platinum_nugget"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_ingot",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_leggings.json b/src/main/resources/data/vplus/recipes/platinum_leggings.json
new file mode 100644
index 0000000..8f1d4ff
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_leggings.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ "# #",
+ "# #"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:platinum_ingot"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_leggings",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_leggings_smithing.json b/src/main/resources/data/vplus/recipes/platinum_leggings_smithing.json
new file mode 100644
index 0000000..1377a54
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_leggings_smithing.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:smithing",
+ "base": {
+ "item": "minecraft:netherite_leggings"
+ },
+ "addition": {
+ "item": "vplus:platinum_ingot"
+ },
+ "result": {
+ "item": "vplus:platinum_leggings"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_nugget_from_ingot.json b/src/main/resources/data/vplus/recipes/platinum_nugget_from_ingot.json
new file mode 100644
index 0000000..33f9d3f
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_nugget_from_ingot.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "#"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:platinum_ingot"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_nugget",
+ "count": 9
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_pickaxe.json b/src/main/resources/data/vplus/recipes/platinum_pickaxe.json
new file mode 100644
index 0000000..7b1ed1e
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_pickaxe.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ " / ",
+ " / "
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:platinum_ingot"
+ },
+ "/": {
+ "item": "minecraft:stick"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_pickaxe",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_pickaxe_smithing.json b/src/main/resources/data/vplus/recipes/platinum_pickaxe_smithing.json
new file mode 100644
index 0000000..2d4975a
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_pickaxe_smithing.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:smithing",
+ "base": {
+ "item": "minecraft:netherite_pickaxe"
+ },
+ "addition": {
+ "item": "vplus:platinum_ingot"
+ },
+ "result": {
+ "item": "vplus:platinum_pickaxe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_shovel.json b/src/main/resources/data/vplus/recipes/platinum_shovel.json
new file mode 100644
index 0000000..af12bd6
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_shovel.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "#",
+ "/",
+ "/"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:platinum_ingot"
+ },
+ "/": {
+ "item": "minecraft:stick"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_shovel",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_shovel_smithing.json b/src/main/resources/data/vplus/recipes/platinum_shovel_smithing.json
new file mode 100644
index 0000000..7a784f6
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_shovel_smithing.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:smithing",
+ "base": {
+ "item": "minecraft:netherite_shovel"
+ },
+ "addition": {
+ "item": "vplus:platinum_ingot"
+ },
+ "result": {
+ "item": "vplus:platinum_shovel"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_sword.json b/src/main/resources/data/vplus/recipes/platinum_sword.json
new file mode 100644
index 0000000..557ab3d
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_sword.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "#",
+ "#",
+ "/"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:platinum_ingot"
+ },
+ "/": {
+ "item": "minecraft:stick"
+ }
+ },
+ "result": {
+ "item": "vplus:platinum_sword",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/platinum_sword_smithing.json b/src/main/resources/data/vplus/recipes/platinum_sword_smithing.json
new file mode 100644
index 0000000..665aa00
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/platinum_sword_smithing.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:smithing",
+ "base": {
+ "item": "minecraft:netherite_sword"
+ },
+ "addition": {
+ "item": "vplus:platinum_ingot"
+ },
+ "result": {
+ "item": "vplus:platinum_sword"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/ruby_apple.json b/src/main/resources/data/vplus/recipes/ruby_apple.json
new file mode 100644
index 0000000..02127c9
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/ruby_apple.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ "#/#",
+ "###"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:ruby"
+ },
+ "/": {
+ "item": "minecraft:apple"
+ }
+ },
+ "result": {
+ "item": "vplus:ruby_apple",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/ruby_axe.json b/src/main/resources/data/vplus/recipes/ruby_axe.json
new file mode 100644
index 0000000..7ee9dd9
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/ruby_axe.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:crafting_shaped",
+"pattern": [
+"XX",
+"X#",
+" #"
+],
+"key": {
+"#": {
+"item": "minecraft:stick"
+},
+"X": {
+"item": "vplus:ruby"
+}
+},
+"result": {
+"item": "vplus:ruby_axe"
+}
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/ruby_axe_smithing.json b/src/main/resources/data/vplus/recipes/ruby_axe_smithing.json
new file mode 100644
index 0000000..1404c37
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/ruby_axe_smithing.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:smithing",
+ "base": {
+ "item": "vplus:platinum_axe"
+ },
+ "addition": {
+ "item": "vplus:ruby"
+ },
+ "result": {
+ "item": "vplus:ruby_axe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/ruby_block.json b/src/main/resources/data/vplus/recipes/ruby_block.json
new file mode 100644
index 0000000..f113d95
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/ruby_block.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "###",
+ "###",
+ "###"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:ruby"
+ }
+ },
+ "result": {
+ "item": "vplus:ruby_block",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/ruby_boots.json b/src/main/resources/data/vplus/recipes/ruby_boots.json
new file mode 100644
index 0000000..deec6f1
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/ruby_boots.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "# #",
+ "# #"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:ruby"
+ }
+ },
+ "result": {
+ "item": "vplus:ruby_boots",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/ruby_boots_smithing.json b/src/main/resources/data/vplus/recipes/ruby_boots_smithing.json
new file mode 100644
index 0000000..b32af39
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/ruby_boots_smithing.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:smithing",
+ "base": {
+ "item": "vplus:platinum_boots"
+ },
+ "addition": {
+ "item": "vplus:ruby"
+ },
+ "result": {
+ "item": "vplus:ruby_boots"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/vplus/recipes/ruby_from_block.json b/src/main/resources/data/vplus/recipes/ruby_from_block.json
new file mode 100644
index 0000000..c42afbe
--- /dev/null
+++ b/src/main/resources/data/vplus/recipes/ruby_from_block.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "#"
+ ],
+ "key": {
+ "#": {
+ "item": "vplus:ruby_block"
+ }
+ },
+ "result": {
+ "item": "vplus:ruby",
+ "count": 9
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
new file mode 100644
index 0000000..7347a0f
--- /dev/null
+++ b/src/main/resources/fabric.mod.json
@@ -0,0 +1,38 @@
+{
+ "schemaVersion": 1,
+ "id": "vplus",
+ "version": "${version}",
+
+ "name": "Vanilla Plus",
+ "description": "Adding things that should be in the vanilla game!",
+ "authors": [
+ "nevetS-718"
+ ],
+ "contact": {
+ "homepage": "https://nevets.tech/",
+ "sources": "https://github.com/nevetS-718/VanillaPlus"
+ },
+
+ "license": "CC0-1.0",
+ "icon": "assets/vplus/icon.png",
+
+ "environment": "*",
+ "entrypoints": {
+ "main": [
+ "tech.nevets.vplus.Main"
+ ]
+ },
+ "mixins": [
+ "vplus.mixins.json"
+ ],
+
+ "depends": {
+ "fabricloader": ">=0.11.3",
+ "fabric": "*",
+ "minecraft": "1.17.x",
+ "java": ">=16"
+ },
+ "suggests": {
+ "another-mod": "*"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/vplus.mixins.json b/src/main/resources/vplus.mixins.json
new file mode 100644
index 0000000..787a8af
--- /dev/null
+++ b/src/main/resources/vplus.mixins.json
@@ -0,0 +1,13 @@
+{
+ "required": true,
+ "minVersion": "0.8",
+ "package": "tech.nevets.vplus.mixin",
+ "compatibilityLevel": "JAVA_16",
+ "mixins": [
+ ],
+ "client": [
+ ],
+ "injectors": {
+ "defaultRequire": 1
+ }
+}
\ No newline at end of file