Skip to content

Commit

Permalink
Server crash fix (#101)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jeryn99 authored Feb 27, 2023
1 parent 274ec0f commit 325a8fa
Show file tree
Hide file tree
Showing 9 changed files with 445 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
import net.minecraft.util.profiling.ProfilerFiller;
import org.jetbrains.annotations.NotNull;
import whocraft.tardis_refined.TardisRefined;
import whocraft.tardis_refined.common.network.messages.SyncConsolePatternsMessage;
import whocraft.tardis_refined.common.tardis.themes.ConsoleTheme;
import whocraft.tardis_refined.common.util.Platform;

import java.util.*;

Expand All @@ -33,11 +35,13 @@ public static Pattern next(ConsoleTheme consoleTheme, Pattern pattern) {
}

public static Pattern addPattern(ConsoleTheme theme, Pattern pattern) {
TardisRefined.LOGGER.info("Adding Console Pattern {} for {}", pattern.identifier, pattern.theme);
TardisRefined.LOGGER.debug("Adding Console Pattern {} for {}", pattern.identifier, pattern.theme);
if (PATTERNS.containsKey(theme)) {
List<Pattern> patternLiat = new ArrayList<>(PATTERNS.get(theme));
patternLiat.add(pattern);
PATTERNS.replace(theme, patternLiat);
if(Platform.getServer() != null) {
new SyncConsolePatternsMessage(PATTERNS).sendToAll();
}
return pattern;
}
PATTERNS.put(theme, List.of(pattern));
Expand All @@ -48,6 +52,9 @@ public static List<Pattern> getPatternsForTheme(ConsoleTheme consoleTheme) {
return PATTERNS.get(consoleTheme);
}

public static Map<ConsoleTheme, List<Pattern>> getPatterns() {
return PATTERNS;
}

public static boolean doesPatternExist(ConsoleTheme consoleTheme, ResourceLocation id) {
List<Pattern> patterns = getPatternsForTheme(consoleTheme);
Expand All @@ -69,6 +76,10 @@ public static Pattern getPatternFromString(ConsoleTheme consoleTheme, ResourceLo
return patterns.get(0);
}

public static void clearPatterns() {
PATTERNS.clear();
}

@Override
protected void apply(Map<ResourceLocation, JsonElement> object, ResourceManager resourceManager, ProfilerFiller profilerFiller) {

Expand Down Expand Up @@ -146,10 +157,6 @@ public ResourceLocation id() {
return identifier;
}

public ConsoleTheme getTheme() {
return theme;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ public class TardisNetwork {

public static final NetworkManager NETWORK = NetworkManager.create(new ResourceLocation(TardisRefined.MODID, "channel"));

public static MessageType SYNC_LEVELS, INT_REACTION, OPEN_MONITOR, CHANGE_SHELL, CHANGE_DESKTOP, CANCEL_CHANGE_DESKTOP;
public static MessageType SYNC_PATTERNS,SYNC_LEVELS, INT_REACTION, OPEN_MONITOR, CHANGE_SHELL, CHANGE_DESKTOP, CANCEL_CHANGE_DESKTOP;

public static void init() {
SYNC_LEVELS = NETWORK.registerS2C("sync_levels", SyncLevelListMessage::new);
INT_REACTION = NETWORK.registerS2C("int_reaction", SyncIntReactionsMessage::new);
OPEN_MONITOR = NETWORK.registerS2C("open_monitor", OpenMonitorMessage::new);
SYNC_PATTERNS = NETWORK.registerS2C("sync_patterns", SyncConsolePatternsMessage::new);
CHANGE_SHELL = NETWORK.registerC2S("change_shell", ChangeShellMessage::new);
CHANGE_DESKTOP = NETWORK.registerC2S("change_desktop", ChangeDesktopMessage::new);
CANCEL_CHANGE_DESKTOP = NETWORK.registerC2S("cancel_change_desktop", CancelDesktopChangeMessage::new);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package whocraft.tardis_refined.common.network.messages;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;

import whocraft.tardis_refined.client.model.blockentity.console.ConsolePatterns;
import whocraft.tardis_refined.common.network.MessageContext;
import whocraft.tardis_refined.common.network.MessageS2C;
import whocraft.tardis_refined.common.network.MessageType;
import whocraft.tardis_refined.common.network.TardisNetwork;
import whocraft.tardis_refined.common.tardis.themes.ConsoleTheme;

public class SyncConsolePatternsMessage extends MessageS2C {

private final Map<ConsoleTheme, List<ConsolePatterns.Pattern>> patterns;

public SyncConsolePatternsMessage(Map<ConsoleTheme, List<ConsolePatterns.Pattern>> patterns) {
this.patterns = patterns;
}

public SyncConsolePatternsMessage(FriendlyByteBuf buf) {
int size = buf.readInt();
patterns = new HashMap<>();
for (int i = 0; i < size; i++) {
ConsoleTheme theme = ConsoleTheme.valueOf(buf.readUtf());
List<ConsolePatterns.Pattern> patternList = new ArrayList<>();
int patternSize = buf.readInt();
for (int j = 0; j < patternSize; j++) {
patternList.add(getPattern(buf));
}
patterns.put(theme, patternList);
}
}

private static ConsolePatterns.Pattern getPattern(FriendlyByteBuf buf) {
ResourceLocation id = buf.readResourceLocation(); // ID
ResourceLocation texture = buf.readResourceLocation(); // texture
String name = buf.readUtf(); // name
ConsoleTheme theme = ConsoleTheme.valueOf(buf.readUtf()); // theme

ConsolePatterns.Pattern consolePattern = new ConsolePatterns.Pattern(theme, id, texture);
consolePattern.setName(name);
return consolePattern;
}

@Override
public MessageType getType() {
return TardisNetwork.SYNC_PATTERNS;
}

@Override
public void toBytes(FriendlyByteBuf buf) {
buf.writeInt(patterns.size());
patterns.forEach((consoleTheme, patterns) -> {
buf.writeUtf(consoleTheme.name());
buf.writeInt(patterns.size());
for (ConsolePatterns.Pattern pattern : patterns) {
writePattern(pattern, buf);
}
});
}

private void writePattern(ConsolePatterns.Pattern pattern, FriendlyByteBuf buf) {
buf.writeResourceLocation(pattern.id()); // ID
buf.writeResourceLocation(pattern.textureLocation()); // texture
buf.writeUtf(pattern.name()); // name
buf.writeUtf(pattern.theme().name()); // theme
}

@Override
public void handle(MessageContext context) {
ConsolePatterns.clearPatterns();
patterns.forEach((consoleTheme, patterns) -> {
for (ConsolePatterns.Pattern pattern : patterns) {
System.out.println(pattern.name());
ConsolePatterns.addPattern(consoleTheme, pattern);
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,19 @@
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
import net.minecraft.client.Minecraft;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
import net.minecraft.world.level.Level;
import whocraft.tardis_refined.client.TardisClientData;
import whocraft.tardis_refined.client.model.blockentity.console.ConsolePatterns;
import whocraft.tardis_refined.common.capability.TardisLevelOperator;
import whocraft.tardis_refined.common.dimension.DelayedTeleportData;
import whocraft.tardis_refined.common.dimension.fabric.DimensionHandlerImpl;
import whocraft.tardis_refined.common.network.messages.SyncConsolePatternsMessage;
import whocraft.tardis_refined.common.util.MiscHelper;
import whocraft.tardis_refined.registry.DimensionTypes;

Expand All @@ -22,6 +28,8 @@ public static void addCommonEvents() {

PlayerBlockBreakEvents.BEFORE.register((world, player, pos, state, blockEntity) -> !MiscHelper.shouldCancelBreaking(world, player, pos, state));

ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> new SyncConsolePatternsMessage(ConsolePatterns.getPatterns()).send(handler.getPlayer()));

END_WORLD_TICK.register(DelayedTeleportData::tick);
START_WORLD_TICK.register(world -> {
if (world.dimensionTypeId().location() == DimensionTypes.TARDIS.location()) {
Expand Down
10 changes: 10 additions & 0 deletions forge/src/main/java/whocraft/tardis_refined/forge/CommonBus.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package whocraft.tardis_refined.forge;

import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraftforge.event.AddReloadListenerEvent;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.event.level.BlockEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import whocraft.tardis_refined.TardisRefined;
import whocraft.tardis_refined.client.model.blockentity.console.ConsolePatterns;
import whocraft.tardis_refined.common.dimension.DelayedTeleportData;
import whocraft.tardis_refined.common.network.messages.SyncConsolePatternsMessage;
import whocraft.tardis_refined.common.util.MiscHelper;

@Mod.EventBusSubscriber(modid = TardisRefined.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE)
Expand Down Expand Up @@ -40,6 +43,13 @@ public static void onBlockPlace(BlockEvent.EntityPlaceEvent event) {
}
}

@SubscribeEvent
public static void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent playerLoggedInEvent){
if(playerLoggedInEvent.getEntity() instanceof ServerPlayer serverPlayer){
new SyncConsolePatternsMessage(ConsolePatterns.getPatterns()).send(serverPlayer);
}
}

@SubscribeEvent
public static void onBlockBreak(BlockEvent.BreakEvent event) {
event.setCanceled(MiscHelper.shouldCancelBreaking(event.getPlayer().level, event.getPlayer(), event.getPos(), event.getState()));
Expand Down
Binary file added gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
4 changes: 4 additions & 0 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading

0 comments on commit 325a8fa

Please sign in to comment.