17 Commits

Author SHA1 Message Date
92e9c996b9 Updated README for 1.4.1 release
All checks were successful
build / build (push) Successful in 1m17s
2025-05-20 12:20:49 +02:00
dd50ff0376 Fixed BlockMixin for 1.21.4
All checks were successful
build / build (push) Successful in 1m16s
2025-05-20 12:15:16 +02:00
d2fd497f26 Merge branch 'master' into 1.21.4 2025-05-20 12:10:17 +02:00
a6f8645c68 Added toggleable scrollToZoom
All checks were successful
build / build (push) Successful in 1m13s
2025-05-20 12:01:59 +02:00
2be7c16e8b Refactored SFKeyBindings to CameraShortcut 2025-05-20 11:59:51 +02:00
ccbb15f7c4 Fixed bug in Replenish feature
All checks were successful
build / build (push) Successful in 1m43s
2025-05-19 22:23:08 +02:00
563febe36f Merge branch 'master' into 1.21.4
All checks were successful
build / build (push) Successful in 1m16s
# Conflicts:
#	src/main/resources/fabric.mod.json
2025-04-12 17:31:34 +02:00
38a244b023 Added correct ModMenu version for 1.21.4
All checks were successful
build / build (push) Successful in 1m21s
2025-04-07 10:37:17 +02:00
868e71eb10 Fixed typo 2025-04-07 10:37:07 +02:00
2a106c9a03 Merge branch 'master' into 1.21.4
# Conflicts:
#	gradle.properties
2025-04-07 10:33:20 +02:00
1d0f7f0f05 Merge branch 'master' into 1.21.4
All checks were successful
build / build (push) Successful in 1m9s
2025-04-06 12:25:41 +02:00
52a97dc2c1 Merge branch 'master' into 1.21.4
All checks were successful
build / build (push) Successful in 1m11s
2025-03-30 23:33:15 +02:00
5916cc5cc2 Merge branch 'master' into 1.21.4
All checks were successful
build / build (push) Successful in 1m2s
2025-03-30 18:16:16 +02:00
4e58bede4b Merge branch 'master' into 1.21.4
All checks were successful
build / build (push) Successful in 1m5s
2025-03-30 17:58:58 +02:00
130b2db727 Merge branch 'master' into 1.21.4
All checks were successful
build / build (push) Successful in 1m8s
2025-03-30 17:28:42 +02:00
c993621bdb Merge branch 'master' into 1.21.4
All checks were successful
build / build (push) Successful in 1m7s
2025-03-30 17:13:15 +02:00
b89ab99928 Downgraded mod to 1.21.4
All checks were successful
build / build (push) Successful in 1m8s
2025-03-30 17:06:42 +02:00
8 changed files with 90 additions and 90 deletions

View File

@ -9,16 +9,16 @@ As a challenge I'm trying to make it as user-friendly as possible.
## Server Side ## Server Side
- Custom join message - Custom join message
![Join Message](https://i.imgur.com/7uv5lUb.png) ![Join Message](https://i.imgur.com/7uv5lUb.png)
- Custom quit message - Custom quit message
![Quit Message](https://i.imgur.com/OhFq1BT.png) ![Quit Message](https://i.imgur.com/OhFq1BT.png)
- Custom chat message - Custom chat message
![Chat Message](https://i.imgur.com/PDwRywP.png) ![Chat Message](https://i.imgur.com/PDwRywP.png)
- Tab list dimension indicator - Tab list dimension indicator
![Overworld](https://i.imgur.com/FB1Y7gD.png) ![Overworld](https://i.imgur.com/FB1Y7gD.png)
![Nether](https://i.imgur.com/XxJDL7u.png) ![Nether](https://i.imgur.com/XxJDL7u.png)
![End](https://i.imgur.com/t5u9goh.png) ![End](https://i.imgur.com/t5u9goh.png)
![Spectator](https://i.imgur.com/eEn4V9S.png) ![Spectator](https://i.imgur.com/eEn4V9S.png)
- Config - Config
- Configurable messages - Configurable messages
- Feature toggle - Feature toggle
@ -27,10 +27,15 @@ As a challenge I'm trying to make it as user-friendly as possible.
- Shared EC Access control (via config) - Shared EC Access control (via config)
- Open/close EC block while opening/closing SEC - Open/close EC block while opening/closing SEC
- Play open & close sounds - Play open & close sounds
- Vein miner - Vein miner
Code inspired by Inferis! - Configurable animation (tick delay)
![VeinMiner](https://i.imgur.com/zOXWMNa.gif) - Leaves veinmineable using shears
Code inspired by Inferis!
![VeinMiner](https://i.imgur.com/zOXWMNa.gif)
- Chat Calculator - Chat Calculator
- Check if operator is present before calculating
- Replenish
### Commands ### Commands
- /spectator | Essentially server-side free-cam, you get put in spectator and are able to fly around, once you use the command again you get put back to where you were. - /spectator | Essentially server-side free-cam, you get put in spectator and are able to fly around, once you use the command again you get put back to where you were.
@ -43,38 +48,26 @@ Code inspired by Inferis!
![Teleportation Keybindings](https://i.imgur.com/gjO1H3d.png) ![Teleportation Keybindings](https://i.imgur.com/gjO1H3d.png)
- Remove game fog (lava, water, etc.) - Remove game fog (lava, water, etc.)
- All types individually toggleable - All types individually toggleable
- Mod Menu integration
- Automatic config adaption (currently booleans only)
- Remove darkness effect - Remove darkness effect
- Toggleable - Toggleable
- Keybinding for /spectator - Keybinding for /spectator
- Render block entities from a longer range
# Currently working on - Toggleable via GUI
- Configurable value
## Server Side - In GUI
- [x] Chat Calculator - Mod Menu integration
- [x] Check if operator is present before calculating DISCLAIMER: this is NOT perfect and still needs to be reworked, I'm just too lazy right now...
- Vein Miner
- [x] Configurable animation (tick delay)
- [x] Leaves veinmineable using shears
- [x] Replenish
## Client Side
- [x] Render block entities from a longer range
- [x] Toggleable via GUI
- [x] Configurable value
- [x] In GUI
- [x] Rework Mod Menu integration to be more flexible
DISCLAIMER: this is NOT perfect and still needs to be reworked, I'm just too lazy right now...
- The following types are accepted: - The following types are accepted:
- String - String
- Boolean - Boolean
- Float - Float
- Integer - Integer
- [x] Zoom - Zoom
- [x] Configurable - Configurable
- Smooth zoom
- Initial zoom value
- Zoom step value
- Scroll to zoom further
# To-do # To-do

View File

@ -4,8 +4,8 @@ org.gradle.parallel=true
# Fabric Properties # Fabric Properties
# check these on https://fabricmc.net/develop # check these on https://fabricmc.net/develop
minecraft_version=1.21.5 minecraft_version=1.21.4
yarn_mappings=1.21.5+build.1 yarn_mappings=1.21.4+build.8
loader_version=0.16.10 loader_version=0.16.10
# Mod Properties # Mod Properties
@ -14,6 +14,6 @@ maven_group=wtf.hak.survivalfabric
archives_base_name=survivalfabric archives_base_name=survivalfabric
# Dependencies # Dependencies
fabric_version=0.119.5+1.21.5 fabric_version=0.119.0+1.21.4
modmenu_version=14.0.0-rc.2 modmenu_version=13.0.3

View File

@ -4,7 +4,7 @@ import net.fabricmc.api.ClientModInitializer;
import wtf.hak.survivalfabric.config.client.ClientConfigManager; import wtf.hak.survivalfabric.config.client.ClientConfigManager;
import wtf.hak.survivalfabric.features.AngleViewer; import wtf.hak.survivalfabric.features.AngleViewer;
import wtf.hak.survivalfabric.features.RemoveDarknessEffect; import wtf.hak.survivalfabric.features.RemoveDarknessEffect;
import wtf.hak.survivalfabric.features.SFKeyBindings; import wtf.hak.survivalfabric.features.CameraShortcut;
import wtf.hak.survivalfabric.features.Zoom; import wtf.hak.survivalfabric.features.Zoom;
public class SurvivalFabricClient implements ClientModInitializer { public class SurvivalFabricClient implements ClientModInitializer {
@ -18,7 +18,7 @@ public class SurvivalFabricClient implements ClientModInitializer {
// Features // Features
AngleViewer.register(); AngleViewer.register();
RemoveDarknessEffect.register(); RemoveDarknessEffect.register();
SFKeyBindings.register(); CameraShortcut.register();
Zoom.register(); Zoom.register();
} }
} }

View File

@ -15,5 +15,6 @@ public class ClientConfig {
public int blockEntityRange = 512; public int blockEntityRange = 512;
public boolean smoothCamera = true; public boolean smoothCamera = true;
public float initialZoom = 20f; public float initialZoom = 20f;
public boolean scrollToZoom = true;
public float zoomStep = 2.5f; public float zoomStep = 2.5f;
} }

View File

@ -6,7 +6,7 @@ import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil; import net.minecraft.client.util.InputUtil;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
public class SFKeyBindings { public class CameraShortcut {
private static final KeyBinding CAMERA_BIND = KeyBindingHelper.registerKeyBinding(new KeyBinding("key.survivalfabric.camera", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_PERIOD, "category.survivalfabric.survivalfabric")); private static final KeyBinding CAMERA_BIND = KeyBindingHelper.registerKeyBinding(new KeyBinding("key.survivalfabric.camera", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_PERIOD, "category.survivalfabric.survivalfabric"));

View File

@ -8,6 +8,8 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import wtf.hak.survivalfabric.features.Zoom; import wtf.hak.survivalfabric.features.Zoom;
import static wtf.hak.survivalfabric.config.client.ClientConfigManager.getConfig;
@Mixin(Mouse.class) @Mixin(Mouse.class)
public class MouseMixin { public class MouseMixin {
@ -16,7 +18,7 @@ public class MouseMixin {
*/ */
@Inject(method = "onMouseScroll", at = @At("HEAD"), cancellable = true) @Inject(method = "onMouseScroll", at = @At("HEAD"), cancellable = true)
private void onMouseScroll(long window, double horizontal, double vertical, CallbackInfo ci) { private void onMouseScroll(long window, double horizontal, double vertical, CallbackInfo ci) {
if (Zoom.isZooming()) { if (Zoom.isZooming() && getConfig().scrollToZoom) {
if (MinecraftClient.getInstance().player != null) { if (MinecraftClient.getInstance().player != null) {
if (vertical > 0) if (vertical > 0)
Zoom.modifyStep(-1); Zoom.modifyStep(-1);

View File

@ -2,7 +2,9 @@ package wtf.hak.survivalfabric.mixin;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.CropBlock; import net.minecraft.block.CropBlock;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.HoeItem; import net.minecraft.item.HoeItem;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@ -35,13 +37,15 @@ public abstract class BlockMixin {
Block seedBlock = state.getBlock(); Block seedBlock = state.getBlock();
List<ItemStack> drops = Block.getDroppedStacks(state, (ServerWorld) world, pos, null, player, mainHand); List<ItemStack> drops = Block.getDroppedStacks(state, (ServerWorld) world, pos, null, player, mainHand);
if (removeIfAvailable(drops, seedItem)) { if (removeIfAvailable(drops, seedItem)) {
if (player.getGameMode() != GameMode.CREATIVE) { if (!player.isCreative()) {
for (ItemStack drop : drops) { for (ItemStack drop : drops) {
Block.dropStack(world, pos, drop); Block.dropStack(world, pos, drop);
} }
player.incrementStat(Stats.USED.getOrCreateStat(seedItem));
mainHand.damage(1, player, EquipmentSlot.MAINHAND);
} }
world.getServer().executeSync(() -> world.setBlockState(pos, seedBlock.getDefaultState())); world.getServer().executeSync(() -> world.setBlockState(pos, seedBlock.getDefaultState()));
player.incrementStat(Stats.USED.getOrCreateStat(seedItem)); cir.setReturnValue(Blocks.AIR.getDefaultState());
cir.cancel(); cir.cancel();
} }
} }

View File

@ -1,48 +1,48 @@
{ {
"schemaVersion": 1, "schemaVersion": 1,
"id": "survivalfabric", "id": "survivalfabric",
"version": "${version}", "version": "${version}",
"name": "SurvivalFabric", "name": "SurvivalFabric",
"description": "Adds a few QOL features to your Survival!", "description": "Adds a few QOL features to your Survival!",
"authors": [ "authors": [
"AlwaysHAK" "AlwaysHAK"
], ],
"contact": { "contact": {
"homepage": "https://hak.wtf", "homepage": "https://hak.wtf",
"sources": "https://git.hak.wtf/hkuijlman/SurvivalFabric", "sources": "https://git.hak.wtf/hkuijlman/SurvivalFabric",
"issues": "https://git.hak.wtf/hkuijlman/SurvivalFabric/issues" "issues": "https://git.hak.wtf/hkuijlman/SurvivalFabric/issues"
}, },
"license": "CC0-1.0", "license": "CC0-1.0",
"icon": "assets/survivalfabric/icon.png", "icon": "assets/survivalfabric/icon.png",
"environment": "*", "environment": "*",
"entrypoints": { "entrypoints": {
"main": [ "main": [
"wtf.hak.survivalfabric.SurvivalFabric" "wtf.hak.survivalfabric.SurvivalFabric"
], ],
"client": [ "client": [
"wtf.hak.survivalfabric.SurvivalFabricClient" "wtf.hak.survivalfabric.SurvivalFabricClient"
], ],
"fabric-datagen": [ "fabric-datagen": [
"wtf.hak.survivalfabric.SurvivalFabricDataGenerator" "wtf.hak.survivalfabric.SurvivalFabricDataGenerator"
], ],
"modmenu": [ "modmenu": [
"wtf.hak.survivalfabric.modmenu.ModMenuIntegration" "wtf.hak.survivalfabric.modmenu.ModMenuIntegration"
] ]
}, },
"mixins": [ "mixins": [
"survivalfabric.mixins.json", "survivalfabric.mixins.json",
{ {
"config": "survivalfabric.client.mixins.json", "config": "survivalfabric.client.mixins.json",
"environment": "client" "environment": "client"
} }
], ],
"depends": { "depends": {
"fabricloader": ">=0.16.10", "fabricloader": ">=0.16.10",
"minecraft": "~1.21.5", "minecraft": "~1.21.4",
"java": ">=21", "java": ">=21",
"fabric-api": "*" "fabric-api": "*"
}, },
"optional": { "optional": {
"modmenu": "*" "modmenu": "*"
} }
} }