5 Commits

Author SHA1 Message Date
ba6153fa41 Updated README.md
All checks were successful
build / build (push) Successful in 1m15s
2025-04-12 17:29:40 +02:00
798027a3af Updated mod version 2025-04-12 17:19:40 +02:00
6b2d080746 Made teleport head lock toggleable 2025-04-12 16:59:39 +02:00
87b6900ff3 Cleaned up 2025-04-12 16:59:27 +02:00
c39249e3c1 Optimized chat message system 2025-04-12 16:31:45 +02:00
7 changed files with 63 additions and 70 deletions

View File

@ -26,37 +26,30 @@ As a challenge I'm trying to make it as user-friendly as possible.
- Version "control"
- Shared Ender Chest
- Shared EC Access control (via config)
- Open/close EC block while opening/closing SEC
- Play open & close sounds
- Vein miner
![VeinMiner](https://i.imgur.com/zOXWMNa.gif)
- Chat Calculator
### 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.
- /slimechunk (/sc) | See if you're currently in a slimechunk
# Currently working on 1.3.2
## Server Side
- [x] Chat Calculator
## Client Side
### New Features
- [x] Teleportation Angle Viewer for [this machine](https://www.youtube.com/watch?v=FnUE-ZaALLw)
![Teleportation Keybindings](https://i.imgur.com/gjO1H3d.png)
- [x] Removed game fog (lava, water, etc.)
- [x] All types individually toggleable
- [x] Mod Menu integration
- [x] Automatic config adaption (currently booleans only)
- [x] Removed darkness effect
- [x] Toggleable
- Teleportation Angle Viewer for [this machine](https://www.youtube.com/watch?v=FnUE-ZaALLw)
- Toggleable pitch/yaw lock while teleporting
![Teleportation Keybindings](https://i.imgur.com/gjO1H3d.png)
- Remove game fog (lava, water, etc.)
- All types individually toggleable
- Mod Menu integration
- Automatic config adaption (currently booleans only)
- Remove darkness effect
- Toggleable
- Keybinding for /camera
### Changes
- Shared Ender Chest
- [x] Open/close EC block while opening/closing SEC
- [x] Play open & close sounds
# Features to come
# To-do
## General
- Rework config system

View File

@ -9,7 +9,7 @@ yarn_mappings=1.21.5+build.1
loader_version=0.16.10
# Mod Properties
mod_version=1.3.2
mod_version=1.4.0
maven_group=wtf.hak.survivalfabric
archives_base_name=survivalfabric

View File

@ -10,4 +10,5 @@ public class ClientConfig {
public boolean renderWaterFog = false;
public boolean renderSnowFog = false;
public boolean removeDarknessEffect = true;
public boolean lockTeleportHeadMovement = true;
}

View File

@ -23,24 +23,25 @@ public abstract class BackgroundRendererMixin {
@Inject(method = "applyFog", at = @At("RETURN"), cancellable = true)
private static void applyFog(Camera camera, BackgroundRenderer.FogType fogType, Vector4f color, float viewDistance, boolean thickenFog, float tickProgress, CallbackInfoReturnable<Fog> cir) {
CameraSubmersionType submersion = camera.getSubmersionType();
boolean renderFog = true;
CameraSubmersionType subType = camera.getSubmersionType();
if (subType == CameraSubmersionType.NONE) {
World world = camera.getFocusedEntity().getWorld();
if (world.getRegistryKey() == World.OVERWORLD && !getConfig().renderOverworldFog)
renderFog = false;
else if (world.getRegistryKey() == World.NETHER && !getConfig().renderNetherFog)
renderFog = false;
else if (world.getRegistryKey() == World.END && !getConfig().renderEndFog)
renderFog = false;
} else if (subType == CameraSubmersionType.WATER && !getConfig().renderWaterFog)
renderFog = false;
else if (subType == CameraSubmersionType.LAVA && !getConfig().renderLavaFog)
renderFog = false;
else if (subType == CameraSubmersionType.POWDER_SNOW && !getConfig().renderSnowFog)
renderFog = false;
if (!renderFog)
switch (submersion) {
case NONE -> {
World world = camera.getFocusedEntity().getWorld();
if ((world.getRegistryKey() == World.OVERWORLD && !getConfig().renderOverworldFog)
|| (world.getRegistryKey() == World.NETHER && !getConfig().renderNetherFog)
|| (world.getRegistryKey() == World.END && !getConfig().renderEndFog)) {
renderFog = false;
}
}
case WATER -> renderFog = getConfig().renderWaterFog;
case LAVA -> renderFog = getConfig().renderLavaFog;
case POWDER_SNOW -> renderFog = getConfig().renderSnowFog;
}
if (!renderFog) {
cir.setReturnValue(EMPTY_FOG);
}
}
}

View File

@ -6,6 +6,7 @@ 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 wtf.hak.survivalfabric.config.client.ClientConfigManager;
import wtf.hak.survivalfabric.features.AngleViewer;
@Mixin(Entity.class)
@ -14,7 +15,7 @@ public abstract class EntityMixin {
@Inject(method = "setYaw", at = @At("HEAD"), cancellable = true)
private void preventYawChange(float yaw, CallbackInfo ci) {
if ((Object) this instanceof ClientPlayerEntity player) {
if (player.isMainPlayer() && AngleViewer.PREVENT_HEAD_MOVEMENT) {
if (player.isMainPlayer() && AngleViewer.PREVENT_HEAD_MOVEMENT && ClientConfigManager.getConfig().lockTeleportHeadMovement) {
ci.cancel();
}
}
@ -23,7 +24,7 @@ public abstract class EntityMixin {
@Inject(method = "setPitch", at = @At("HEAD"), cancellable = true)
private void preventPitchChange(float pitch, CallbackInfo ci) {
if ((Object) this instanceof ClientPlayerEntity player) {
if (player.isMainPlayer() && AngleViewer.PREVENT_HEAD_MOVEMENT) {
if (player.isMainPlayer() && AngleViewer.PREVENT_HEAD_MOVEMENT && ClientConfigManager.getConfig().lockTeleportHeadMovement) {
ci.cancel();
}
}

View File

@ -10,7 +10,6 @@ public class ModMenuIntegration implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
System.out.println("Does ModMenuIntegration even load?");
return parent -> new ConfigScreen(parent);
return ConfigScreen::new;
}
}

View File

@ -49,41 +49,39 @@ public abstract class PlayerManagerMixin {
@Inject(method = {"broadcast(Lnet/minecraft/network/message/SignedMessage;Lnet/minecraft/server/network/ServerPlayerEntity;Lnet/minecraft/network/message/MessageType$Parameters;)V"}, at = {@At("HEAD")}, cancellable = true)
private void onBroadcast(SignedMessage message, ServerPlayerEntity sender, MessageType.Parameters parameters, CallbackInfo ci) {
if (sender != null && ConfigManager.getConfig().chatMessageEnabled) {
if (sender != null) {
String rawMessage = message.getContent().getString().trim();
if (sender != null && ConfigManager.getConfig().chatCalcEnabled) {
boolean isCalcEnabled = ConfigManager.getConfig().chatCalcEnabled;
boolean isMsgEnabled = ConfigManager.getConfig().chatMessageEnabled;
String processedMessage = rawMessage;
if (isCalcEnabled) {
String expression = rawMessage.endsWith("=") ? rawMessage.substring(0, rawMessage.length() - 1).trim() : rawMessage;
try {
String result = String.valueOf(evaluateExpression(expression));
String old = rawMessage;
rawMessage += "§6";
if (rawMessage.contains(" ")) rawMessage += " ";
if (!old.trim().endsWith("=")) rawMessage += "=";
if (rawMessage.contains(" ")) rawMessage += " ";
rawMessage += (result.endsWith(".0")) ? result.substring(0, result.length() - 2) : result;
} catch (Exception e) {
}
StringBuilder sb = new StringBuilder(rawMessage).append("§6");
if (rawMessage.contains(" ")) sb.append(" ");
if (!rawMessage.endsWith("=")) sb.append("=");
if (rawMessage.contains(" ")) sb.append(" ");
sb.append(result.endsWith(".0") ? result.substring(0, result.length() - 2) : result);
processedMessage = sb.toString();
} catch (Exception ignored) {}
}
Text text = Text.literal(String.format(ConfigManager.getConfig().chatMessage, sender.getName().getString(), rawMessage));
sender.getServer().getPlayerManager().broadcast(text, false);
if (isMsgEnabled) {
String formatted = String.format(ConfigManager.getConfig().chatMessage, sender.getName().getString(), processedMessage);
sender.getServer().getPlayerManager().broadcast(Text.literal(formatted), false);
} else if (isCalcEnabled) {
String formatted = "<" + sender.getName().getString() + "> " + processedMessage;
sender.getServer().getPlayerManager().broadcast(Text.literal(formatted), false);
}
ci.cancel();
} else if (sender != null && ConfigManager.getConfig().chatCalcEnabled) {
String rawMessage = message.getContent().getString().trim();
String expression = rawMessage.endsWith("=") ? rawMessage.substring(0, rawMessage.length() - 1).trim() : rawMessage;
try {
String result = String.valueOf(evaluateExpression(expression));
String old = rawMessage;
rawMessage += "§6";
if (rawMessage.contains(" ")) rawMessage += " ";
if (!old.trim().endsWith("=")) rawMessage += "=";
if (rawMessage.contains(" ")) rawMessage += " ";
rawMessage += (result.endsWith(".0")) ? result.substring(0, result.length() - 2) : result;
Text formattedMessage = Text.literal("<" + sender.getName().getString() + "> " + rawMessage);
sender.getServer().getPlayerManager().broadcast(formattedMessage, false);
ci.cancel();
} catch (Exception e) {
}
}
}
private double evaluateExpression(String expression) {