diff --git a/README.md b/README.md index 69c5e0b..40968d2 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,12 @@ A collection of small tweaks for Minecraft. ## Plant Tweaks * Easy Harvest Crops - Right clicking fully grown clops harvests and replants them * Easy Harvest Sugarcane - Right clicking sugarcane harvests all sugarcane higher than the one you clicked. Preserves the bottom-most block +* Easy Harvest Item Drops - Causes Easy Harvest to drop items on the ground instead of inserting them directly into your inventory * Auto Planting - Plants that fall on dirt or grass will automatically plant. Applies to saplings, wheat seeds, pumpkin seeds, melon seeds, beetroot seeds, carrots, and potatoes -* Grass Spreading - Grass and long grass spread naturally over time +* Rejuvenation - Grass and long grass spread naturally over time * Plant Hitboxes - Removes hitboxes from long grass. Hitboxes are shown when using shears. Seeds can be gathered by using a hoe on the ground below them * Passable Leaves - Removes collision from leaves +* Instant Leaf Decay - Leaves decay instantly when outside range of a log block * Better Lily Pads - Allows boats to pass through lily pads without breaking them. Also allows entities to rise through the bottom of a lily pad * Farmer Villager Automation - Farmer villagers will deposit excess items into a nearby chest @@ -15,6 +17,11 @@ A collection of small tweaks for Minecraft. * Animals Eat off the Ground - Chickens, cows, horses, pigs, sheep, and wolves will eat off the ground * Wild Wolves Breed - Wild wolves are able to be bred. Allows for some neat natural systems! +## Nether Tweaks +* Nether Rejuvenation - Allows nylium and roots to spread in the Nether like grass does in the Overworld +* Blue Soul Fire Effects - Entities ignited by soul fire will have blue fire effects instead of normal fire +* Soul Fire Does More Damage - Entities ignited by soul fire take twice as much damage as those ignited by regular fire + ## Miscellaneous Tweaks * Bubble Columns Flow - When set to On, bubble columns behave as they do in vanilla. When set to Off, bubble columns don't spread water to their surrounding blocks * Burned Logs Drop Charcoal - When a log on fire burns, it drops a charcoal (Also makes charcoal fireproof) @@ -25,6 +32,7 @@ A collection of small tweaks for Minecraft. * Infinite Cauldrons - Right clicking a Cauldron with a Heart of the Sea creates an infinite water source * Easy XP - All vanilla XP sources give their XP directly to the player that earns them (other than the Ender Dragon) * Tinted Tipped Arrows - The heads of tipped arrows render the color of their status effect +* Mossy Things - Cobblestone and stone brick blocks, slabs, stairs, and walls will turn mossy when in rain or surrounded by water, and will dry out again when in sunlight ## Contact Me I can be found hanging out on the Fabric Discord as Haven King#2790. Feel free to shoot me a message there if you have any questions. diff --git a/gradle.properties b/gradle.properties index edaf6f9..af3994e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,12 @@ org.gradle.jvmargs = -Xmx1G #Fabric properties -minecraft_version = 1.16.3 -yarn_mappings = 1.16.3+build.11 -loader_version = 0.10.0+local +minecraft_version = 1.16.4 +yarn_mappings = 1.16.4+build.7 +loader_version = 0.10.8 #Mod properties -mod_version = 1.0.16 +mod_version = 1.1.1 maven_group = dev.hephaestus archives_base_name = tinytweaks diff --git a/src/main/java/dev/hephaestus/tweaks/Tweaks.java b/src/main/java/dev/hephaestus/tweaks/Tweaks.java index 0f8f4d4..806d81b 100644 --- a/src/main/java/dev/hephaestus/tweaks/Tweaks.java +++ b/src/main/java/dev/hephaestus/tweaks/Tweaks.java @@ -8,10 +8,14 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.rendereregistry.v1.BlockEntityRendererRegistry; +import net.fabricmc.fabric.api.tag.TagRegistry; import net.minecraft.block.Blocks; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.item.Item; import net.minecraft.state.property.BooleanProperty; import net.minecraft.tag.BlockTags; +import net.minecraft.tag.Tag; +import net.minecraft.util.Identifier; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -26,6 +30,8 @@ public class Tweaks implements ModInitializer, ClientModInitializer { public static TweaksConfig CONFIG = new TweaksConfig(); + public static Tag SHOWS_GRASS_HITBOXES = TagRegistry.item(new Identifier(MOD_ID, "shows_grass_hitboxes")); + @Override public void onInitialize() { AutoConfig.register(TweaksConfig.class, GsonConfigSerializer::new); diff --git a/src/main/java/dev/hephaestus/tweaks/TweaksConfig.java b/src/main/java/dev/hephaestus/tweaks/TweaksConfig.java index 252feac..84ac92e 100644 --- a/src/main/java/dev/hephaestus/tweaks/TweaksConfig.java +++ b/src/main/java/dev/hephaestus/tweaks/TweaksConfig.java @@ -16,6 +16,10 @@ public class TweaksConfig implements ConfigData { @ConfigEntry.Gui.Tooltip(count = 2) public boolean easyHarvestSugarcane = true; + @ConfigEntry.Category("plants") + @ConfigEntry.Gui.Tooltip(count = 2) + public boolean easyHarvestDropAsItems = false; + @ConfigEntry.Category("plants") @ConfigEntry.Gui.CollapsibleObject public AutoPlanting autoPlanting = new AutoPlanting(); @@ -32,6 +36,11 @@ public class TweaksConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject public LeavesConfig leaves = new LeavesConfig(); + @ConfigEntry.Category("plants") + @ConfigEntry.Gui.Tooltip + @ConfigEntry.BoundedDiscrete(min = 1, max = 100) + public int leafDecaySpeed = 1; + @ConfigEntry.Category("plants") @ConfigEntry.Gui.Tooltip(count = 2) public boolean betterLilyPads = true; @@ -87,6 +96,7 @@ public class TweaksConfig implements ConfigData { public boolean doubleDoors = true; @ConfigEntry.Category("misc") + @ConfigEntry.Gui.Tooltip(count = 3) public boolean bubbleColumnsFlow = false; @ConfigEntry.Category("misc") diff --git a/src/main/java/dev/hephaestus/tweaks/mixin/block/MakeCauldronsInfinite.java b/src/main/java/dev/hephaestus/tweaks/mixin/block/MakeCauldronsInfinite.java index 4d8e1bb..54cb206 100644 --- a/src/main/java/dev/hephaestus/tweaks/mixin/block/MakeCauldronsInfinite.java +++ b/src/main/java/dev/hephaestus/tweaks/mixin/block/MakeCauldronsInfinite.java @@ -61,9 +61,7 @@ private void makeInfinite(BlockState state, World world, BlockPos pos, PlayerEnt (double) pos.getY() + 2.0D, (double) pos.getZ() + 0.5D, 1, - (double) ((float) int_1 + random.nextFloat()) - 0.5D, - (float) int_3 - random.nextFloat() - 1.0F, - (double) ((float) int_2 + random.nextFloat()) - 0.5D, + 0,0,0, 1); } } diff --git a/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/CocoaBeans.java b/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/CocoaBeans.java index 604e058..642a8da 100644 --- a/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/CocoaBeans.java +++ b/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/CocoaBeans.java @@ -1,6 +1,7 @@ package dev.hephaestus.tweaks.mixin.block.easyharvest; import dev.hephaestus.tweaks.Tweaks; +import dev.hephaestus.tweaks.TweaksConfig; import net.minecraft.block.*; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Items; @@ -27,14 +28,16 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt } boolean playerAvailable = player.isAlive() || player instanceof ServerPlayerEntity && !((ServerPlayerEntity)player).isDisconnected(); - if (playerAvailable) + if (playerAvailable && !Tweaks.CONFIG.easyHarvestDropAsItems) { player.inventory.offerOrDrop(world, stack); - else + } else { Block.dropStack(world, pos, stack); + } }); world.setBlockState(pos, state.with(CocoaBlock.AGE, 0)); } + return ActionResult.SUCCESS; } else { return ActionResult.PASS; diff --git a/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/Crops.java b/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/Crops.java index 74ad328..09adf41 100644 --- a/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/Crops.java +++ b/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/Crops.java @@ -36,10 +36,11 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt } boolean playerAvailable = player.isAlive() || player instanceof ServerPlayerEntity && !((ServerPlayerEntity)player).isDisconnected(); - if (playerAvailable) + if (playerAvailable && !Tweaks.CONFIG.easyHarvestDropAsItems) { player.inventory.offerOrDrop(world, stack); - else + } else { Block.dropStack(world, pos, stack); + } }); world.setBlockState(pos, this.withAge(0)); diff --git a/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/NetherWarts.java b/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/NetherWarts.java index 2302782..4217397 100644 --- a/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/NetherWarts.java +++ b/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/NetherWarts.java @@ -30,10 +30,11 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt } boolean playerAvailable = player.isAlive() || player instanceof ServerPlayerEntity && !((ServerPlayerEntity)player).isDisconnected(); - if (playerAvailable) + if (playerAvailable && !Tweaks.CONFIG.easyHarvestDropAsItems) { player.inventory.offerOrDrop(world, stack); - else + } else { Block.dropStack(world, pos, stack); + } }); world.setBlockState(pos, state.with(NetherWartBlock.AGE, 0)); diff --git a/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/SugarCane.java b/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/SugarCane.java index 15ed304..66bd48b 100644 --- a/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/SugarCane.java +++ b/src/main/java/dev/hephaestus/tweaks/mixin/block/easyharvest/SugarCane.java @@ -48,10 +48,11 @@ private boolean tryBreakSugarcane(World world, BlockPos pos, PlayerEntity player if (n > 0) { boolean playerAvailable = player.isAlive() || player instanceof ServerPlayerEntity && !((ServerPlayerEntity) player).isDisconnected(); - if (playerAvailable) + if (playerAvailable && !Tweaks.CONFIG.easyHarvestDropAsItems) { player.inventory.offerOrDrop(world, new ItemStack(Items.SUGAR_CANE, n)); - else + } else { Block.dropStack(world, pos, new ItemStack(Items.SUGAR_CANE, n)); + } } return n > 0; diff --git a/src/main/java/dev/hephaestus/tweaks/mixin/block/mossythings/MoistenAbstractBlock.java b/src/main/java/dev/hephaestus/tweaks/mixin/block/mossythings/MoistenAbstractBlock.java index ac50746..c72c92f 100644 --- a/src/main/java/dev/hephaestus/tweaks/mixin/block/mossythings/MoistenAbstractBlock.java +++ b/src/main/java/dev/hephaestus/tweaks/mixin/block/mossythings/MoistenAbstractBlock.java @@ -6,6 +6,7 @@ import net.minecraft.block.BlockState; import net.minecraft.fluid.Fluids; import net.minecraft.server.world.ServerWorld; +import net.minecraft.state.property.Properties; import net.minecraft.util.math.BlockPos; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -21,18 +22,22 @@ private void doTick(BlockState state, ServerWorld world, BlockPos pos, Random ra if (Tweaks.CONFIG.mossyThings && Moistener.canMoisten(state.getBlock())) { boolean isSkyVisible = false; boolean isWaterNearby = false; - for (BlockPos adjacent : BlockPos.iterate(pos.up().north().west(), pos.down().south().east())) { - if (world.isSkyVisible(adjacent)) isSkyVisible = true; - if (world.getFluidState(adjacent).getFluid() == Fluids.WATER) isWaterNearby = true; + + if (state.getBlock().getStateManager().getProperties().contains(Properties.WATERLOGGED)) { + isWaterNearby = state.get(Properties.WATERLOGGED); } - if (isSkyVisible) { - if (world.isRaining() && world.getBiome(pos).getDownfall() > 0) { - world.setBlockState(pos, Moistener.moisten(state)); - } else if (world.isDay() && !isWaterNearby) { - world.setBlockState(pos, Moistener.dry(state)); - } + for (BlockPos adjacent : BlockPos.iterate(pos.up().north().west(), pos.down().south().east())) { + if (!isSkyVisible && world.isSkyVisible(adjacent)) isSkyVisible = true; + if (!isWaterNearby && world.getFluidState(adjacent).getFluid() == Fluids.WATER) isWaterNearby = true; + if (isSkyVisible && isWaterNearby) break; + } + if ((isSkyVisible && world.isRaining() && world.getBiome(pos).getDownfall() > 0) + || (isWaterNearby)) { + world.setBlockState(pos, Moistener.moisten(state)); + } else if (isSkyVisible && world.isDay()) { + world.setBlockState(pos, Moistener.dry(state)); } } } diff --git a/src/main/java/dev/hephaestus/tweaks/mixin/block/planthitboxes/FernBlocks.java b/src/main/java/dev/hephaestus/tweaks/mixin/block/planthitboxes/FernBlocks.java index c98b12f..75376da 100644 --- a/src/main/java/dev/hephaestus/tweaks/mixin/block/planthitboxes/FernBlocks.java +++ b/src/main/java/dev/hephaestus/tweaks/mixin/block/planthitboxes/FernBlocks.java @@ -1,8 +1,8 @@ package dev.hephaestus.tweaks.mixin.block.planthitboxes; import dev.hephaestus.tweaks.Tweaks; +import dev.hephaestus.tweaks.util.ItemEntityShapeContext; import net.minecraft.block.*; -import net.minecraft.item.Items; import net.minecraft.util.math.BlockPos; import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShapes; @@ -21,9 +21,10 @@ protected FernBlocks(Settings settings) { @Override public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - if (!Tweaks.CONFIG.plantHitboxes && !context.isHolding(Items.SHEARS)) + if (!Tweaks.CONFIG.plantHitboxes && !(context instanceof ItemEntityShapeContext && ((ItemEntityShapeContext) context).getItem().isIn(Tweaks.SHOWS_GRASS_HITBOXES))) { return VoxelShapes.empty(); - else + } else { return SHAPE; + } } } diff --git a/src/main/java/dev/hephaestus/tweaks/mixin/block/planthitboxes/TallPlants.java b/src/main/java/dev/hephaestus/tweaks/mixin/block/planthitboxes/TallPlants.java index 3f49633..c47bb0d 100644 --- a/src/main/java/dev/hephaestus/tweaks/mixin/block/planthitboxes/TallPlants.java +++ b/src/main/java/dev/hephaestus/tweaks/mixin/block/planthitboxes/TallPlants.java @@ -1,11 +1,11 @@ package dev.hephaestus.tweaks.mixin.block.planthitboxes; import dev.hephaestus.tweaks.Tweaks; +import dev.hephaestus.tweaks.util.ItemEntityShapeContext; import net.minecraft.block.BlockState; import net.minecraft.block.PlantBlock; import net.minecraft.block.ShapeContext; import net.minecraft.block.TallPlantBlock; -import net.minecraft.item.Items; import net.minecraft.util.math.BlockPos; import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShapes; @@ -19,9 +19,10 @@ protected TallPlants(Settings settings) { } public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - if (!Tweaks.CONFIG.plantHitboxes && !context.isHolding(Items.SHEARS)) + if (!Tweaks.CONFIG.plantHitboxes && !(context instanceof ItemEntityShapeContext && ((ItemEntityShapeContext) context).getItem().isIn(Tweaks.SHOWS_GRASS_HITBOXES))) { return VoxelShapes.empty(); - else + } else { return super.getOutlineShape(state, view, pos, context); + } } } diff --git a/src/main/java/dev/hephaestus/tweaks/mixin/entity/GetHeldItem.java b/src/main/java/dev/hephaestus/tweaks/mixin/entity/GetHeldItem.java new file mode 100644 index 0000000..8dd67b7 --- /dev/null +++ b/src/main/java/dev/hephaestus/tweaks/mixin/entity/GetHeldItem.java @@ -0,0 +1,18 @@ +package dev.hephaestus.tweaks.mixin.entity; + +import dev.hephaestus.tweaks.util.ItemEntityShapeContext; +import net.minecraft.block.EntityShapeContext; +import net.minecraft.item.Item; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(EntityShapeContext.class) +public class GetHeldItem implements ItemEntityShapeContext { + @Shadow @Final private Item heldItem; + + @Override + public Item getItem() { + return this.heldItem; + } +} diff --git a/src/main/java/dev/hephaestus/tweaks/mixin/world/TickMore.java b/src/main/java/dev/hephaestus/tweaks/mixin/world/TickMore.java new file mode 100644 index 0000000..3282c81 --- /dev/null +++ b/src/main/java/dev/hephaestus/tweaks/mixin/world/TickMore.java @@ -0,0 +1,49 @@ +package dev.hephaestus.tweaks.mixin.world; + +import dev.hephaestus.tweaks.Tweaks; +import net.minecraft.block.BlockState; +import net.minecraft.fluid.FluidState; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.tag.BlockTags; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.profiler.Profiler; +import net.minecraft.util.registry.RegistryKey; +import net.minecraft.world.MutableWorldProperties; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkSection; +import net.minecraft.world.chunk.WorldChunk; +import net.minecraft.world.dimension.DimensionType; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import java.util.function.Supplier; + +@Mixin(ServerWorld.class) +public abstract class TickMore extends World { + protected TickMore(MutableWorldProperties properties, RegistryKey registryRef, DimensionType dimensionType, Supplier profiler, boolean isClient, boolean debugWorld, long seed) { + super(properties, registryRef, dimensionType, profiler, isClient, debugWorld, seed); + } + + @Inject(method = "tickChunk", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/chunk/ChunkSection;getYOffset()I", shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD) + private void tickMore(WorldChunk chunk, int randomTickSpeed, CallbackInfo ci, ChunkPos chunkPos, boolean bl, int startX, int startZ, Profiler profiler, ChunkSection[] var8, int var9, int var10, ChunkSection chunkSection) { + int startY = chunkSection.getYOffset(); + + for (int i = 0; i < randomTickSpeed; ++i) { + for (int j = 0; j < Tweaks.CONFIG.leafDecaySpeed - 1; ++j) { + BlockPos blockPos4 = this.getRandomPosInChunk(startX, startY, startZ, 15); + profiler.push("randomTick"); + BlockState blockState = chunkSection.getBlockState(blockPos4.getX() - startX, blockPos4.getY() - startY, blockPos4.getZ() - startZ); + + if (blockState.hasRandomTicks() && blockState.isIn(BlockTags.LEAVES)) { + blockState.randomTick((ServerWorld) (Object) this, blockPos4, this.random); + } + + profiler.pop(); + } + } + } +} diff --git a/src/main/java/dev/hephaestus/tweaks/mixin/world/UpgradeChunk.java b/src/main/java/dev/hephaestus/tweaks/mixin/world/UpgradeChunk.java index ce5512b..442a3ed 100644 --- a/src/main/java/dev/hephaestus/tweaks/mixin/world/UpgradeChunk.java +++ b/src/main/java/dev/hephaestus/tweaks/mixin/world/UpgradeChunk.java @@ -1,6 +1,5 @@ package dev.hephaestus.tweaks.mixin.world; -import dev.hephaestus.tweaks.Tweaks; import dev.hephaestus.tweaks.util.CauldronChunk; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -19,7 +18,6 @@ public abstract class UpgradeChunk implements CauldronChunk { private void copyCauldrons(World world, ProtoChunk protoChunk, CallbackInfo ci) { for (Map.Entry entry : ((CauldronChunk) protoChunk).getCauldrons()) { this.setInfinite(entry.getKey(), entry.getValue()); - Tweaks.log("FUCKING HELL"); } } } diff --git a/src/main/java/dev/hephaestus/tweaks/util/ItemEntityShapeContext.java b/src/main/java/dev/hephaestus/tweaks/util/ItemEntityShapeContext.java new file mode 100644 index 0000000..87fe67f --- /dev/null +++ b/src/main/java/dev/hephaestus/tweaks/util/ItemEntityShapeContext.java @@ -0,0 +1,7 @@ +package dev.hephaestus.tweaks.util; + +import net.minecraft.item.Item; + +public interface ItemEntityShapeContext { + Item getItem(); +} diff --git a/src/main/resources/assets/tinytweaks/lang/en_us.json b/src/main/resources/assets/tinytweaks/lang/en_us.json index 2b8db9b..8a3d437 100644 --- a/src/main/resources/assets/tinytweaks/lang/en_us.json +++ b/src/main/resources/assets/tinytweaks/lang/en_us.json @@ -10,6 +10,9 @@ "text.autoconfig.tinytweaks.option.easyHarvestSugarcane": "Easy Harvest Sugarcane", "text.autoconfig.tinytweaks.option.easyHarvestSugarcane.@Tooltip[0]": "Right clicking sugarcane harvests all sugarcane higher than the one you clicked", "text.autoconfig.tinytweaks.option.easyHarvestSugarcane.@Tooltip[1]": "Preserves the bottom-most block", + "text.autoconfig.tinytweaks.option.easyHarvestDropAsItems": "Easy Harvest Item Drops", + "text.autoconfig.tinytweaks.option.easyHarvestDropAsItems.@Tooltip[0]": "When §aOn§r, easy harvest drops items on the ground", + "text.autoconfig.tinytweaks.option.easyHarvestDropAsItems.@Tooltip[1]": "When §cOff§r, easy harvest deposits items into your inventory", "text.autoconfig.tinytweaks.option.farmerVillagerAutomation": "Farmer Automation", "text.autoconfig.tinytweaks.option.farmerVillagerAutomation.@Tooltip": "Farmer villagers will deposit excess items into a nearby chest", "text.autoconfig.tinytweaks.option.flintAndSteel": "Flint and Steel", @@ -63,6 +66,8 @@ "text.autoconfig.tinytweaks.option.leaves.treeClimbingSpeed.@Tooltip[1]": "1.0 is the default speed for ladders and vines", "text.autoconfig.tinytweaks.option.leaves.persistentCollide": "Persistent Leaf Collision", "text.autoconfig.tinytweaks.option.leaves.persistentCollide.@Tooltip": "These are leaves placed by the player", + "text.autoconfig.tinytweaks.option.leafDecaySpeed": "Leaf Decay Speed", + "text.autoconfig.tinytweaks.option.leafDecaySpeed.@Tooltip": "Leaves decay X times faster, where X is whatever this is set to", "text.autoconfig.tinytweaks.option.namesAndThings": "Names and Things", "text.autoconfig.tinytweaks.option.namesAndThings.containerLabels": "Chest Labels", "text.autoconfig.tinytweaks.option.namesAndThings.containerLabels.@Tooltip": "Looking at a chest renders its name above it", @@ -80,6 +85,9 @@ "text.autoconfig.tinytweaks.option.doubleDoors.@Tooltip[0]": "Doors and trapdoors open adjacent doors and trapdoors of the same type", "text.autoconfig.tinytweaks.option.doubleDoors.@Tooltip[1]": "Works when opened by hand or with redstone", "text.autoconfig.tinytweaks.option.bubbleColumnsFlow": "Bubble Columns Flow", + "text.autoconfig.tinytweaks.option.bubbleColumnsFlow.@Tooltip[0]": "When §aOn§r, bubble column blocks behave like vanilla", + "text.autoconfig.tinytweaks.option.bubbleColumnsFlow.@Tooltip[1]": "When §cOff§r, bubble column blocks will not spread to", + "text.autoconfig.tinytweaks.option.bubbleColumnsFlow.@Tooltip[2]": "surrounding blocks like a normal water source block", "text.autoconfig.tinytweaks.option.netherRejuvenation": "Nether Rejuvenation", "text.autoconfig.tinytweaks.option.netherRejuvenation.enabled": "Enabled", "text.autoconfig.tinytweaks.option.netherRejuvenation.enabled.@Tooltip[0]": "Causes nylium, roots, and nether sprouts to spread", @@ -111,6 +119,7 @@ "text.autoconfig.tinytweaks.option.easyXp.@Tooltip[1]": "experience orbs in the world", "text.autoconfig.tinytweaks.option.easyHarvestCrops.boolean.true": "§aOn", "text.autoconfig.tinytweaks.option.easyHarvestSugarcane.boolean.true": "§aOn", + "text.autoconfig.tinytweaks.option.easyHarvestDropAsItems.boolean.true": "§aOn", "text.autoconfig.tinytweaks.option.autoPlanting.enabled.boolean.true": "§aOn", "text.autoconfig.tinytweaks.option.rejuvenation.enabled.boolean.true": "§aOn", "text.autoconfig.tinytweaks.option.rejuvenation.longGrass.boolean.true": "§aOn", @@ -139,6 +148,7 @@ "text.autoconfig.tinytweaks.option.soulFireDoesMoreDamage.boolean.true": "§aOn", "text.autoconfig.tinytweaks.option.easyHarvestCrops.boolean.false": "§cOff", "text.autoconfig.tinytweaks.option.easyHarvestSugarcane.boolean.false": "§cOff", + "text.autoconfig.tinytweaks.option.easyHarvestDropAsItems.boolean.false": "§cOff", "text.autoconfig.tinytweaks.option.autoPlanting.enabled.boolean.false": "§cOff", "text.autoconfig.tinytweaks.option.rejuvenation.enabled.boolean.false": "§cOff", "text.autoconfig.tinytweaks.option.rejuvenation.longGrass.boolean.false": "§cOff", diff --git a/src/main/resources/data/tinytweaks/tags/items/shows_grass_hitboxes.json b/src/main/resources/data/tinytweaks/tags/items/shows_grass_hitboxes.json new file mode 100644 index 0000000..2c6c53a --- /dev/null +++ b/src/main/resources/data/tinytweaks/tags/items/shows_grass_hitboxes.json @@ -0,0 +1,7 @@ +{ + "replace": "false", + "values": [ + "minecraft:shears", + "#fabric:hoes" + ] +} \ No newline at end of file diff --git a/src/main/resources/tweaks.mixins.json b/src/main/resources/tweaks.mixins.json index 32d7096..da5c236 100644 --- a/src/main/resources/tweaks.mixins.json +++ b/src/main/resources/tweaks.mixins.json @@ -31,6 +31,7 @@ "dev.DepositGrindstoneXp", "entity.AutoPlant", "entity.BurnUsableEntities", + "entity.GetHeldItem", "entity.SoulFireDoesMoreDamage", "entity.ai.brain.task.FarmerVillagersDepositSurplus", "entity.betterlilypads.FallingParticles", @@ -55,6 +56,7 @@ "prod.DepositGrindstoneXp", "prod.DepositGrindstoneXp$SlotMixin", "world.SerializeChunkData", + "world.TickMore", "world.TrackBlockChanges", "world.UpgradeChunk" ],