Compare commits
5 Commits
281297bdca
...
ba6153fa41
Author | SHA1 | Date | |
---|---|---|---|
ba6153fa41 | |||
798027a3af | |||
6b2d080746 | |||
87b6900ff3 | |||
c39249e3c1 |
35
README.md
35
README.md
@ -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
|
||||

|
||||
- 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)
|
||||

|
||||
- [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
|
||||

|
||||
- 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
|
||||
|
@ -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
|
||||
|
||||
|
@ -10,4 +10,5 @@ public class ClientConfig {
|
||||
public boolean renderWaterFog = false;
|
||||
public boolean renderSnowFog = false;
|
||||
public boolean removeDarknessEffect = true;
|
||||
public boolean lockTeleportHeadMovement = true;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Reference in New Issue
Block a user