Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 16 additions & 8 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
# 0.5 The Performance Update
# 0.6 The Tilting Update

## **Now Supports Create 6!**
**Now requires dragonlib > 3.0.14**
**Always backup your save before updating!**

## The Performance part
- Improved rendering performance so no more fps drops
- Massively improved ETCS server side perfomance.
- Small performance improvements to compat code
## New Features

## The New Things Part
- ETCS now treats end of track as a red signal
- Added settings menu for trains.
- Added tilt customization with options including None, Passive, Active, and Custom.
- Enabled custom per train acceleration settings with None and Custom modes.

- Added train banking/tilting
- Added "Time Of Day Realistic" Condition. Which enhances Time Of Day Condition by factoring in train delays.
- language support


## Bug Fixes
- Fixed a bug where pressing shift would cause a crash.
- Some other things i forgot to write down.
9 changes: 9 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ subprojects {
maven { url = "https://maven.blamejared.com/" } // JEI
maven { url = "https://maven.parchmentmc.org" } // Parchment mappings
maven { url = "https://maven.quiltmc.org/repository/release" } // Quilt Mappings
maven { url = "https://raw.githubusercontent.com/MisterJulsen/modsrepo/main/maven/" } // DragonLib
maven { url = "https://cursemaven.com"
content{
includeGroup("curse.maven")
}
}
maven { // Flywheel
url = "https://maven.tterrag.com/"
content {
Expand Down Expand Up @@ -83,6 +89,7 @@ allprojects {
maven { url = "https://maven.terraformersmc.com/releases/" }
maven { url = "https://raw.githubusercontent.com/Fuzss/modresources/main/maven/" }
maven { url = "https://purplecreate.github.io/maven/"}
maven { url = "https://maven.lounode.top/releases" }

}

Expand Down Expand Up @@ -110,6 +117,8 @@ tasks.create("publishRealism") {
dependsOn tasks.build, ":fabric:publishMods", ":forge:publishMods"
break
case "fabric":
dependsOn "${platform}:build", "${platform}:publishMods"
break
case "forge":
dependsOn "${platform}:build", "${platform}:publishMods"
break
Expand Down
5 changes: 2 additions & 3 deletions common/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,14 @@ loom {

dependencies {
modImplementation("net.fabricmc:fabric-loader:${fabric_loader_version}")
modCompileOnly("com.simibubi.create:create-fabric-${minecraft_version}:${create_fabric_version}")

modCompileOnly("com.simibubi.create:create-fabric:${create_fabric_version}-mc${minecraft_version}")
modImplementation "dev.architectury:architectury:$rootProject.architectury_api_version"
implementation("javazoom:jlayer:${jlayer_version}")

annotationProcessor(implementation("io.github.llamalad7:mixinextras-common:${mixin_extras_version}"))
modCompileOnly("purplecreate.tramways:tramways-common:$tramways_version-mc1.20.1-common")
modRuntimeOnly("purplecreate.tramways:tramways-common:$tramways_version-mc1.20.1-common")

modImplementation("de.mrjulsen.mcdragonlib:dragonlib-fabric:${minecraft_version}-${dragonlib_version}")
}

sourceSets {
Expand Down
10 changes: 10 additions & 0 deletions common/src/main/java/net/Realism/CommonEvents.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package net.Realism;

import net.minecraft.server.level.ServerPlayer;

public class CommonEvents {
public static void onPlayerJoin(ServerPlayer player) {
RNetworking.onPlayerJoin(player);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package net.Realism.Interfaces;

import java.util.UUID;

/**
* Interface for adding banking (roll) functionality to OrientedContraptionEntity
*/
public interface IOrientedContraptionEntity {
/**
* Get the current roll angle
*/
float realism$getRoll();

/**
* Set the current roll angle
*/
void realism$setRoll(float roll);

/**
* Get the previous tick's roll angle (for interpolation)
*/
float realism$getPrevRoll();

/**
* Set the previous tick's roll angle (for interpolation)
*/
void realism$setPrevRoll(float prevRoll);

/**
* Get the interpolated roll angle for rendering
* @param partialTicks The partial tick time
* @return Interpolated roll angle
*/
float realism$getViewRoll(float partialTicks);

UUID getuid();
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package net.Realism.Interfaces;

public interface IRealismScreens {
void init(ITrainInterface Rtrain);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package net.Realism.Interfaces;

public interface IScheduleRuntimeMixin {
long getDepartureDate();
long getExpectedArrivalDate();
void setExpectedArrivalDate(long date);
int getLastScheduledDepartureDate();
void setLastScheduledDepartureDate(int date);
boolean dontCheck();
void setDontCheck(boolean dontCheck);
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package net.Realism.Interfaces;

import net.Realism.trains.TrainSettings;
import net.Realism.trains.etcs.ETCS;

public interface ITrainInterface{
ETCS realism$getETCS();
void realism$setETCS(ETCS etcs);
TrainSettings realism$getSettings();
void realism$setSettings(TrainSettings tiltSetting);

}
29 changes: 29 additions & 0 deletions common/src/main/java/net/Realism/NBT/RNBTHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package net.Realism.NBT;

import net.minecraft.nbt.CompoundTag;

import java.util.List;
import java.util.UUID;

public class RNBTHelper {
public static CompoundTag writeUUIDList(List<UUID> list, String key) {
int iter = 0;
CompoundTag tag = new CompoundTag();
for (UUID id : list) {
tag.putUUID(String.join("_", key, String.valueOf(iter++)), id);
}
return tag;
}

public static List<UUID> readUUIDList(CompoundTag tag, String key) {
List<UUID> list = new java.util.ArrayList<>(List.of());
for (int i = 0; i < tag.size(); i++) {
list.add(tag.getUUID(String.join("_", key, String.valueOf(i))));
}
return list;
}




}
26 changes: 26 additions & 0 deletions common/src/main/java/net/Realism/RExtras.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package net.Realism;

import com.simibubi.create.content.trains.schedule.condition.ScheduleWaitCondition;
import com.simibubi.create.content.trains.schedule.destination.ScheduleInstruction;
import net.Realism.trains.schedule.TimeOfDayRealistic;
import net.createmod.catnip.data.Pair;

import java.util.function.Supplier;

import static com.simibubi.create.content.trains.schedule.Schedule.CONDITION_TYPES;
import static com.simibubi.create.content.trains.schedule.Schedule.INSTRUCTION_TYPES;

public class RExtras {
public static class Schedule {
private static void registerInstruction(String path, Supplier<? extends ScheduleInstruction> factory) {
INSTRUCTION_TYPES.add(Pair.of(RealismMod.id(path), factory));
}
private static void registerCondition(String path, Supplier<? extends ScheduleWaitCondition> clazz) {
CONDITION_TYPES.add(Pair.of(RealismMod.id(path), clazz));
}

public static void register() {
registerCondition("time_of_day_realistic", TimeOfDayRealistic::new);
}
}
}
36 changes: 29 additions & 7 deletions common/src/main/java/net/Realism/RNetworking.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
package net.Realism;

import com.simibubi.create.Create;
import dev.architectury.injectables.annotations.ExpectPlatform;
import io.netty.buffer.Unpooled;
import net.Realism.network.ETCSStartStopPacket;
import net.Realism.network.ETCSSyncPacket;
import net.Realism.network.SteerDirectionPacket;
import net.Realism.Interfaces.ITrainInterface;
import net.Realism.network.*;
import net.Realism.util.C2SPacket;
import net.Realism.util.S2CPacket;
import net.minecraft.client.Minecraft;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
Expand Down Expand Up @@ -46,9 +47,10 @@ public void handle(Minecraft mc) {
return;

mc.getConnection().onDisconnect(
Component.literal(
"Create: Tramways network versions do not match! Server expected %s, client has %s"
.formatted(serverVersion, RNetworking.VERSION)
Component.translatable(
"realism.network.version_mismatch",
serverVersion,
RNetworking.VERSION
)
);
}
Expand Down Expand Up @@ -104,6 +106,15 @@ public static void handleInternal(FriendlyByteBuf buf, ServerPlayer player) {

public static void onPlayerJoin(ServerPlayer player) {
sendToPlayer(new CheckVersionS2CPacket(RNetworking.VERSION), player);
MinecraftServer server = player.server;
server.getAllLevels().forEach((level) -> {
Create.RAILWAYS.sided(level).trains.forEach((uuid, train) -> {
if (train == null) return;
if (train instanceof ITrainInterface Rtrain) {
RNetworking.sendToPlayer(new TrainSettingsUpdatePacket(Rtrain.realism$getSettings(), train.id), player);
}
});
});
}

@ExpectPlatform
Expand Down Expand Up @@ -145,6 +156,17 @@ public static void register() {
ETCSStartStopPacket::read

);

registerS2C(
RollSyncPacket.class,
RollSyncPacket::read
);
registerC2S(
TrainSettingsSavePacket.class,
TrainSettingsSavePacket::read
);
registerS2C(
TrainSettingsUpdatePacket.class,
TrainSettingsUpdatePacket::read
);
}
}
16 changes: 0 additions & 16 deletions common/src/main/java/net/Realism/RealismBlocks.java

This file was deleted.

5 changes: 4 additions & 1 deletion common/src/main/java/net/Realism/RealismMod.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package net.Realism;


import com.simibubi.create.foundation.data.CreateRegistrate;
import net.minecraft.resources.ResourceLocation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -8,14 +10,15 @@ public class RealismMod {
public static final String MOD_ID = "realism";
public static final String NAME = "Create Realism";
public static final Logger LOGGER = LoggerFactory.getLogger(NAME);
public static final CreateRegistrate REGISTRATE = CreateRegistrate.create(MOD_ID);

public static void init() {
RealismBlocks.init();
RealismSounds.SOUND_EVENTS.register();
}

public static void commonSetup() {
RNetworking.register();
RExtras.Schedule.register();
}


Expand Down
25 changes: 14 additions & 11 deletions common/src/main/java/net/Realism/compat/TramwaysCompat.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import net.Realism.Interfaces.ITramSignPoint;
import net.Realism.RealismExpectPlatform;
import net.Realism.RealismMod;
import net.Realism.mixinaccesors.TramSignDataAccessor;
import net.Realism.mixin.mixinaccesors.TramSignDataAccessor;
import net.Realism.trains.SignalFinder;
import net.Realism.trains.etcs.ETCS;
import net.createmod.catnip.data.Couple;
Expand All @@ -13,7 +13,6 @@
import purplecreate.tramways.content.signs.demands.SignDemand;
import purplecreate.tramways.content.signs.demands.TemporaryEndSignDemand;
import purplecreate.tramways.content.signs.demands.TemporarySpeedSignDemand;
import purplecreate.tramways.mixinInterfaces.ISpeedLimitableTrain;

import java.util.*;

Expand Down Expand Up @@ -62,6 +61,7 @@ public static List<ETCS.SpeedLimit> processTramSignsImpl(SignalFinder.SignalScan
CompoundTag tag = null;
SignDemand demand = null;

//noinspection ReassignedVariable
if (sides.get(sign.getPrimary()) == null) continue;
for (TramSignPoint.SignData signD : new HashSet<>(sides.get(sign.getPrimary()))) {
if (signD == null) continue;
Expand Down Expand Up @@ -89,24 +89,27 @@ public static List<ETCS.SpeedLimit> processTramSignsImpl(SignalFinder.SignalScan
double signSpeedLimit = tag.getInt("Throttle");
signSpeedLimit = (signSpeedLimit / 100) * maxSpeed;
cachedSpeedLimits.add(new ETCS.SpeedLimit(sign.getDistance(), signSpeedLimit));
if (demand instanceof TemporarySpeedSignDemand) {
LastLimit = (int) cachedSpeedLimits.get(cachedSpeedLimits.size()-1).speedLimit();
if (demand instanceof TemporarySpeedSignDemand && !first) {
LastLimit = (int) cachedSpeedLimits.get(cachedSpeedLimits.size()-2).speedLimit();
} else if (demand instanceof TemporarySpeedSignDemand) {
//
double speed = train.maxSpeed()*20;
LastLimit = (int) (train.throttle*speed*3.6);
}
first= false;}
first= false;}
if (demand instanceof TemporaryEndSignDemand && !first) {
cachedSpeedLimits.add(new ETCS.SpeedLimit(sign.getDistance(), LastLimit));}
else if (demand instanceof TemporarySpeedSignDemand && first) {
ISpeedLimitableTrain Ttrain = (ISpeedLimitableTrain) train;
double tempSpeedLimit = 300.0;
else if (demand instanceof TemporaryEndSignDemand && first) {
double tempSpeedLimit = 300.0;
try {
java.lang.reflect.Field tempSPeedLimitField = ISpeedLimitableTrain.class.getDeclaredField("tempSpeedLimit$actual");
java.lang.reflect.Field tempSPeedLimitField = train.getClass().getDeclaredField("tramways$storedPermanent");
tempSPeedLimitField.setAccessible(true);
tempSpeedLimit = (double) tempSPeedLimitField.get(Ttrain);
tempSpeedLimit = (double) tempSPeedLimitField.get(train);
}
catch (Exception e) {
RealismMod.LOGGER.error("Error accessing tempSpeedLimit field: " + e.getMessage());
}
cachedSpeedLimits.add(new ETCS.SpeedLimit(sign.getDistance(),tempSpeedLimit));
cachedSpeedLimits.add(new ETCS.SpeedLimit(sign.getDistance(),tempSpeedLimit*3.6*train.maxSpeed()*20));
}
first = false;
}
Expand Down
Loading