Skip to content

Commit

Permalink
Make config being changeable ingame
Browse files Browse the repository at this point in the history
  • Loading branch information
Meldexun committed Feb 15, 2022
1 parent 170288d commit 5c2d306
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 23 deletions.
45 changes: 39 additions & 6 deletions src/main/java/meldexun/reachfix/ReachFix.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,22 @@

import meldexun.reachfix.config.ReachFixConfig;
import meldexun.reachfix.util.ReachFixUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.server.MinecraftServer;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerChangedDimensionEvent;
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerRespawnEvent;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig.ModConfigEvent;
import net.minecraftforge.fml.config.ModConfig.Type;
import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.fml.server.ServerLifecycleHooks;

@Mod(ReachFix.MOD_ID)
public class ReachFix {
Expand All @@ -19,16 +26,27 @@ public class ReachFix {

public ReachFix() {
ModLoadingContext.get().registerConfig(Type.SERVER, ReachFixConfig.SERVER_SPEC);
MinecraftForge.EVENT_BUS.addListener(this::onFMLServerStartingEvent);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setupClient);
}

private void setup(FMLCommonSetupEvent event) {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onConfigUpdated);
MinecraftForge.EVENT_BUS.addListener(this::onPlayerLoggedInEvent);
MinecraftForge.EVENT_BUS.addListener(this::onPlayerChangedDimensionEvent);
MinecraftForge.EVENT_BUS.addListener(this::onPlayerRespawnEvent);
}

public void onFMLServerStartingEvent(FMLServerStartingEvent event) {
ReachFixUtil.setEnabled(ReachFixConfig.SERVER_CONFIG.enabled.get());
ReachFixUtil.setReach(ReachFixConfig.SERVER_CONFIG.reach.get());
ReachFixUtil.setReachCreative(ReachFixConfig.SERVER_CONFIG.reachCreative.get());
public void onConfigUpdated(ModConfigEvent event) {
if (!event.getConfig().getModId().equals(MOD_ID)) {
return;
}
MinecraftServer server = ServerLifecycleHooks.getCurrentServer();
if (server != null) {
server.getAllLevels().forEach(level -> {
level.players().forEach(ReachFixUtil::updateBaseReachModifier);
});
}
}

public void onPlayerLoggedInEvent(PlayerLoggedInEvent event) {
Expand All @@ -43,4 +61,19 @@ public void onPlayerRespawnEvent(PlayerRespawnEvent event) {
ReachFixUtil.updateBaseReachModifier(event.getPlayer());
}

private void setupClient(FMLClientSetupEvent event) {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onConfigSynced);
}

@OnlyIn(Dist.CLIENT)
public void onConfigSynced(ModConfigEvent event) {
if (!event.getConfig().getModId().equals(MOD_ID)) {
return;
}
Minecraft mc = Minecraft.getInstance();
if (mc.level != null) {
mc.level.players().forEach(ReachFixUtil::updateBaseReachModifier);
}
}

}
21 changes: 4 additions & 17 deletions src/main/java/meldexun/reachfix/util/ReachFixUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.UUID;

import meldexun.reachfix.ReachFix;
import meldexun.reachfix.config.ReachFixConfig;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.ai.attributes.AttributeModifier.Operation;
import net.minecraft.entity.ai.attributes.ModifiableAttributeInstance;
Expand All @@ -13,9 +14,6 @@ public class ReachFixUtil {

private static final UUID REACH_UUID = UUID.fromString("00d4860f-b487-4402-b424-373a52566330");
private static final String REACH_STRING = ReachFix.MOD_ID + ":base_reach";
private static boolean enabled = true;
private static double reach = 4.5D;
private static double reachCreative = 5.0D;

public static void updateBaseReachModifier(PlayerEntity player) {
updateBaseReachModifier(player, player.isCreative());
Expand All @@ -24,7 +22,8 @@ public static void updateBaseReachModifier(PlayerEntity player) {
public static void updateBaseReachModifier(PlayerEntity player, boolean creative) {
ModifiableAttributeInstance attribute = player.getAttribute(ForgeMod.REACH_DISTANCE.get());
attribute.removeModifier(REACH_UUID);
attribute.addTransientModifier(new AttributeModifier(REACH_UUID, REACH_STRING, (creative ? reachCreative : reach) - 5.0D, Operation.ADDITION));
attribute.addTransientModifier(new AttributeModifier(REACH_UUID, REACH_STRING,
(creative ? ReachFixConfig.SERVER_CONFIG.reachCreative.get() : ReachFixConfig.SERVER_CONFIG.reach.get()) - 5.0D, Operation.ADDITION));
}

public static double getBlockReach(PlayerEntity player) {
Expand All @@ -36,19 +35,7 @@ public static double getEntityReach(PlayerEntity player) {
}

public static boolean isEnabled() {
return enabled;
}

public static void setEnabled(boolean enabled) {
ReachFixUtil.enabled = enabled;
}

public static void setReach(double reach) {
ReachFixUtil.reach = reach;
}

public static void setReachCreative(double reachCreative) {
ReachFixUtil.reachCreative = reachCreative;
return ReachFixConfig.SERVER_CONFIG.enabled.get();
}

}

0 comments on commit 5c2d306

Please sign in to comment.