First Commit
This commit is contained in:
		
							
								
								
									
										119
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,119 @@ | ||||
| # User-specific stuff | ||||
| .idea/ | ||||
|  | ||||
| *.iml | ||||
| *.ipr | ||||
| *.iws | ||||
|  | ||||
| # IntelliJ | ||||
| out/ | ||||
| # mpeltonen/sbt-idea plugin | ||||
| .idea_modules/ | ||||
|  | ||||
| # JIRA plugin | ||||
| atlassian-ide-plugin.xml | ||||
|  | ||||
| # Compiled class file | ||||
| *.class | ||||
|  | ||||
| # Log file | ||||
| *.log | ||||
|  | ||||
| # BlueJ files | ||||
| *.ctxt | ||||
|  | ||||
| # Package Files # | ||||
| *.jar | ||||
| *.war | ||||
| *.nar | ||||
| *.ear | ||||
| *.zip | ||||
| *.tar.gz | ||||
| *.rar | ||||
|  | ||||
| # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml | ||||
| hs_err_pid* | ||||
|  | ||||
| *~ | ||||
|  | ||||
| # temporary files which can be created if a process still has a handle open of a deleted file | ||||
| .fuse_hidden* | ||||
|  | ||||
| # KDE directory preferences | ||||
| .directory | ||||
|  | ||||
| # Linux trash folder which might appear on any partition or disk | ||||
| .Trash-* | ||||
|  | ||||
| # .nfs files are created when an open file is removed but is still being accessed | ||||
| .nfs* | ||||
|  | ||||
| # General | ||||
| .DS_Store | ||||
| .AppleDouble | ||||
| .LSOverride | ||||
|  | ||||
| # Icon must end with two \r | ||||
| Icon | ||||
|  | ||||
| # Thumbnails | ||||
| ._* | ||||
|  | ||||
| # Files that might appear in the root of a volume | ||||
| .DocumentRevisions-V100 | ||||
| .fseventsd | ||||
| .Spotlight-V100 | ||||
| .TemporaryItems | ||||
| .Trashes | ||||
| .VolumeIcon.icns | ||||
| .com.apple.timemachine.donotpresent | ||||
|  | ||||
| # Directories potentially created on remote AFP share | ||||
| .AppleDB | ||||
| .AppleDesktop | ||||
| Network Trash Folder | ||||
| Temporary Items | ||||
| .apdisk | ||||
|  | ||||
| # Windows thumbnail cache files | ||||
| Thumbs.db | ||||
| Thumbs.db:encryptable | ||||
| ehthumbs.db | ||||
| ehthumbs_vista.db | ||||
|  | ||||
| # Dump file | ||||
| *.stackdump | ||||
|  | ||||
| # Folder config file | ||||
| [Dd]esktop.ini | ||||
|  | ||||
| # Recycle Bin used on file shares | ||||
| $RECYCLE.BIN/ | ||||
|  | ||||
| # Windows Installer files | ||||
| *.cab | ||||
| *.msi | ||||
| *.msix | ||||
| *.msm | ||||
| *.msp | ||||
|  | ||||
| # Windows shortcuts | ||||
| *.lnk | ||||
|  | ||||
| .gradle | ||||
| build/ | ||||
|  | ||||
| # Ignore Gradle GUI config | ||||
| gradle-app.setting | ||||
|  | ||||
| # Cache of project | ||||
| .gradletasknamecache | ||||
|  | ||||
| **/build/ | ||||
|  | ||||
| # Common working directory | ||||
| run/ | ||||
| runs/ | ||||
|  | ||||
| # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) | ||||
| !gradle-wrapper.jar | ||||
							
								
								
									
										21
									
								
								LICENSE.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								LICENSE.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| The MIT License (MIT) | ||||
|  | ||||
| Copyright (c) 2025 Tonitch8 | ||||
|  | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
|  | ||||
| The above copyright notice and this permission notice shall be included in | ||||
| all copies or substantial portions of the Software. | ||||
|  | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
| THE SOFTWARE. | ||||
							
								
								
									
										89
									
								
								build.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								build.gradle
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,89 @@ | ||||
| plugins { | ||||
|     id 'fabric-loom' version '1.10-SNAPSHOT' | ||||
|     id 'maven-publish' | ||||
| } | ||||
|  | ||||
| version = project.mod_version | ||||
| group = project.maven_group | ||||
|  | ||||
| base { | ||||
|     archivesName = project.archives_base_name | ||||
| } | ||||
|  | ||||
|  | ||||
| repositories { | ||||
|     // Add repositories to retrieve artifacts from in here. | ||||
|     // You should only use this when depending on other mods because | ||||
|     // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. | ||||
|     // See https://docs.gradle.org/current/userguide/declaring_repositories.html | ||||
|     // for more information about repositories. | ||||
| } | ||||
|  | ||||
| dependencies { | ||||
|     // To change the versions see the gradle.properties file | ||||
|     minecraft "com.mojang:minecraft:${project.minecraft_version}" | ||||
|     mappings "net.fabricmc:yarn:${project.yarn_mappings}" | ||||
|     modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" | ||||
|  | ||||
|     modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" | ||||
| } | ||||
|  | ||||
| processResources { | ||||
|     inputs.property "version", project.version | ||||
|     inputs.property "minecraft_version", project.minecraft_version | ||||
|     inputs.property "loader_version", project.loader_version | ||||
|     filteringCharset "UTF-8" | ||||
|  | ||||
|     filesMatching("fabric.mod.json") { | ||||
|         expand "version": project.version, | ||||
|                 "minecraft_version": project.minecraft_version, | ||||
|                 "loader_version": project.loader_version | ||||
|     } | ||||
| } | ||||
|  | ||||
| def targetJavaVersion = 17 | ||||
| tasks.withType(JavaCompile).configureEach { | ||||
|     // ensure that the encoding is set to UTF-8, no matter what the system default is | ||||
|     // this fixes some edge cases with special characters not displaying correctly | ||||
|     // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html | ||||
|     // If Javadoc is generated, this must be specified in that task too. | ||||
|     it.options.encoding = "UTF-8" | ||||
|     if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { | ||||
|         it.options.release.set(targetJavaVersion) | ||||
|     } | ||||
| } | ||||
|  | ||||
| java { | ||||
|     def javaVersion = JavaVersion.toVersion(targetJavaVersion) | ||||
|     if (JavaVersion.current() < javaVersion) { | ||||
|         toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion) | ||||
|     } | ||||
|     // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task | ||||
|     // if it is present. | ||||
|     // If you remove this line, sources will not be generated. | ||||
|     withSourcesJar() | ||||
| } | ||||
|  | ||||
| jar { | ||||
|     from("LICENSE") { | ||||
|         rename { "${it}_${project.archivesBaseName}" } | ||||
|     } | ||||
| } | ||||
|  | ||||
| // configure the maven publication | ||||
| publishing { | ||||
|     publications { | ||||
|         create("mavenJava", MavenPublication) { | ||||
|             artifactId = project.archives_base_name | ||||
|             from components.java | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. | ||||
|     repositories { | ||||
|         // Add repositories to publish to here. | ||||
|         // Notice: This block does NOT have the same function as the block in the top level. | ||||
|         // The repositories here will be used for publishing your artifact, not for | ||||
|         // retrieving dependencies. | ||||
|     } | ||||
| } | ||||
							
								
								
									
										14
									
								
								gradle.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								gradle.properties
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | ||||
| # Done to increase the memory available to gradle. | ||||
| org.gradle.jvmargs=-Xmx1G | ||||
| # Fabric Properties | ||||
| # check these on https://modmuss50.me/fabric.html | ||||
| minecraft_version=1.20.1 | ||||
| yarn_mappings=1.20.1+build.10 | ||||
| loader_version=0.16.10 | ||||
| # Mod Properties | ||||
| mod_version=1.0-SNAPSHOT | ||||
| maven_group=ovh.herisson | ||||
| archives_base_name=HornOfTheWild | ||||
| # Dependencies | ||||
| # check this on https://modmuss50.me/fabric.html | ||||
| fabric_version=0.92.3+1.20.1 | ||||
							
								
								
									
										7
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| distributionBase=GRADLE_USER_HOME | ||||
| distributionPath=wrapper/dists | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip | ||||
| networkTimeout=10000 | ||||
| validateDistributionUrl=true | ||||
| zipStoreBase=GRADLE_USER_HOME | ||||
| zipStorePath=wrapper/dists | ||||
							
								
								
									
										9
									
								
								settings.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								settings.gradle
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| pluginManagement { | ||||
|     repositories { | ||||
|         maven { | ||||
|             name = 'Fabric' | ||||
|             url = 'https://maven.fabricmc.net/' | ||||
|         } | ||||
|         gradlePluginPortal() | ||||
|     } | ||||
| } | ||||
							
								
								
									
										19
									
								
								src/main/java/ovh/herisson/hornofthewild/HornOfTheWild.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/main/java/ovh/herisson/hornofthewild/HornOfTheWild.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| package ovh.herisson.hornofthewild; | ||||
|  | ||||
| import net.fabricmc.api.ModInitializer; | ||||
| import net.minecraft.item.Item; | ||||
| import net.minecraft.registry.Registries; | ||||
| import net.minecraft.registry.Registry; | ||||
| import net.minecraft.util.Identifier; | ||||
|  | ||||
| public class HornOfTheWild implements ModInitializer { | ||||
|  | ||||
|     public static final String MOD_ID = "hotw"; | ||||
|  | ||||
|     public static final HornOfTheWildItem hornofthewild = new HornOfTheWildItem(new Item.Settings()); | ||||
|  | ||||
|     @Override | ||||
|     public void onInitialize() { | ||||
|         Registry.register(Registries.ITEM, new Identifier(MOD_ID, "hornofthewild"), hornofthewild); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,86 @@ | ||||
| package ovh.herisson.hornofthewild; | ||||
|  | ||||
| import net.minecraft.block.Block; | ||||
| import net.minecraft.block.BlockState; | ||||
| import net.minecraft.block.entity.BlockEntity; | ||||
| import net.minecraft.entity.LivingEntity; | ||||
| import net.minecraft.entity.player.PlayerEntity; | ||||
| import net.minecraft.item.Item; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.item.ItemUsage; | ||||
| import net.minecraft.registry.RegistryKeys; | ||||
| import net.minecraft.registry.tag.TagKey; | ||||
| import net.minecraft.sound.SoundCategory; | ||||
| import net.minecraft.sound.SoundEvents; | ||||
| import net.minecraft.text.Text; | ||||
| import net.minecraft.util.Hand; | ||||
| import net.minecraft.util.Identifier; | ||||
| import net.minecraft.util.TypedActionResult; | ||||
| import net.minecraft.util.UseAction; | ||||
| import net.minecraft.util.math.BlockBox; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.world.World; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
|  | ||||
| public class HornOfTheWildItem extends Item { | ||||
|     public static final TagKey<Block> HORN_BREAKABLE = TagKey.of(RegistryKeys.BLOCK, new Identifier(HornOfTheWild.MOD_ID, "hotw_breakable")); | ||||
|     public HornOfTheWildItem(Settings settings) { | ||||
|         super(settings); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int getMaxUseTime(ItemStack itemStack) { | ||||
|         return 72000; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public TypedActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand) { | ||||
|         return ItemUsage.consumeHeldItem(world, playerEntity, hand); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void usageTick(World world, LivingEntity livingEntity, ItemStack itemStack, int time) { | ||||
|         if (!world.isClient) { | ||||
|             if(time % 5 == 0){ | ||||
|                HornBeat(world, itemStack, livingEntity.getBlockPos(), livingEntity); | ||||
|             } | ||||
|             world.playSound(null, livingEntity.getX(), livingEntity.getY(), livingEntity.getZ(), SoundEvents.ENTITY_HORSE_BREATHE, SoundCategory.PLAYERS, 1.0F, 1.0F); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public UseAction getUseAction(ItemStack itemStack) { | ||||
|         return UseAction.BOW; | ||||
|     } | ||||
|  | ||||
|     private static boolean canHarvest(World world, ItemStack stack, BlockPos pos, LivingEntity livingEntity) { | ||||
|         BlockState state = world.getBlockState(pos); | ||||
|         return state.isIn(HORN_BREAKABLE); | ||||
|     } | ||||
|  | ||||
|     private static void HornBeat(World world, ItemStack stack, BlockPos srcPos, LivingEntity livingEntity){ | ||||
|         int range = 12; | ||||
|         int rangeY = 3; | ||||
|  | ||||
|         List<BlockPos> coords = new ArrayList<>(); | ||||
|         for (BlockPos pos: BlockPos.iterate(srcPos.add(-range, -rangeY, -range), srcPos.add(range, rangeY, range))){ | ||||
|             if(HornOfTheWildItem.canHarvest(world, stack, pos, livingEntity)){ | ||||
|                 coords.add(pos.toImmutable()); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         Collections.shuffle(coords); | ||||
|  | ||||
|         int count = Math.min(coords.size(), 32); | ||||
|         for (int i = 0; i < count; i++) { | ||||
|             BlockPos currCoords = coords.get(i); | ||||
|             BlockState state = world.getBlockState(currCoords); | ||||
|             BlockEntity be = world.getBlockEntity(currCoords); | ||||
|             world.breakBlock(currCoords, true); | ||||
|         } | ||||
|  | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,10 @@ | ||||
| package ovh.herisson.hornofthewild.client; | ||||
|  | ||||
| import net.fabricmc.api.ClientModInitializer; | ||||
|  | ||||
| public class HornofthewildClient implements ClientModInitializer { | ||||
|  | ||||
|     @Override | ||||
|     public void onInitializeClient() { | ||||
|     } | ||||
| } | ||||
							
								
								
									
										3
									
								
								src/main/resources/assets/hotw/lang/en_us.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/main/resources/assets/hotw/lang/en_us.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| { | ||||
|   "item.hotw.hornofthewild": "Horn Of The Wild" | ||||
| } | ||||
| @ -0,0 +1,6 @@ | ||||
| { | ||||
|   "parent": "item/generated", | ||||
|   "textures": { | ||||
|     "layer0": "hotw:item/hornofthewild" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								src/main/resources/assets/hotw/textures/item/hornofthewild.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/main/resources/assets/hotw/textures/item/hornofthewild.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 432 B | 
| @ -0,0 +1,20 @@ | ||||
| { | ||||
|   "type": "minecraft:crafting_shaped", | ||||
|   "pattern": [ | ||||
|     " # ", | ||||
|     "#F#", | ||||
|     "## " | ||||
|   ], | ||||
|   "key": { | ||||
|     "#": { | ||||
|       "tag": "minecraft:logs" | ||||
|     }, | ||||
|     "F": { | ||||
|       "item": "minecraft:fern" | ||||
|     } | ||||
|   }, | ||||
|   "result": { | ||||
|     "item": "hotw:hornofthewild", | ||||
|     "count": 1 | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,9 @@ | ||||
| { | ||||
|   "type": "minecraft:stonecutting", | ||||
|   "ingredient": { | ||||
|     "item": "minecraft:goat_horn" | ||||
|   }, | ||||
|   "result": "hotw:hornofthewild", | ||||
|   "count": 1, | ||||
|   "category": "misc" | ||||
| } | ||||
							
								
								
									
										16
									
								
								src/main/resources/data/hotw/tags/blocks/hotw_breakable.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/main/resources/data/hotw/tags/blocks/hotw_breakable.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| { | ||||
|   "replace": false, | ||||
|   "values": [ | ||||
|     "#minecraft:leaves", | ||||
|     "#minecraft:crops", | ||||
|     "#minecraft:fire", | ||||
|     "#minecraft:flowers", | ||||
|  | ||||
|     "minecraft:grass", | ||||
|     "minecraft:large_fern", | ||||
|  | ||||
|     "minecraft:tall_seagrass", | ||||
|     "minecraft:seagrass", | ||||
|     "minecraft:kelp_plant" | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										28
									
								
								src/main/resources/fabric.mod.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/main/resources/fabric.mod.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | ||||
| { | ||||
|   "schemaVersion": 1, | ||||
|   "id": "hornofthewild", | ||||
|   "version": "${version}", | ||||
|   "name": "HornOfTheWild", | ||||
|   "description": "Horn of the wild from botania", | ||||
|   "authors": [], | ||||
|   "contact": {}, | ||||
|   "license": "MIT", | ||||
|   "icon": "assets/hornofthewild/icon.png", | ||||
|   "environment": "*", | ||||
|   "entrypoints": { | ||||
|     "client": [ | ||||
|       "ovh.herisson.hornofthewild.client.HornofthewildClient" | ||||
|     ], | ||||
|     "main": [ | ||||
|       "ovh.herisson.hornofthewild.HornOfTheWild" | ||||
|     ] | ||||
|   }, | ||||
|   "mixins": [ | ||||
|     "hornofthewild.mixins.json" | ||||
|   ], | ||||
|   "depends": { | ||||
|     "fabricloader": ">=${loader_version}", | ||||
|     "fabric": "*", | ||||
|     "minecraft": "${minecraft_version}" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										13
									
								
								src/main/resources/hornofthewild.mixins.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/main/resources/hornofthewild.mixins.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| { | ||||
|   "required": true, | ||||
|   "minVersion": "0.8", | ||||
|   "package": "ovh.herisson.hornofthewild.mixin", | ||||
|   "compatibilityLevel": "JAVA_17", | ||||
|   "mixins": [ | ||||
|   ], | ||||
|   "client": [ | ||||
|   ], | ||||
|   "injectors": { | ||||
|     "defaultRequire": 1 | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user