2
0
Fork 0

Carriage Rework, using a network of registered roads

main
KeyLime17 5 months ago
parent fcd30e2b4a
commit 585a81ad0c

@ -3,6 +3,7 @@ package com.zivilon.cinder_loe;
import com.zivilon.cinder_loe.blocks.*;
import com.zivilon.cinder_loe.blocks.plants.cabbageCrop;
import com.zivilon.cinder_loe.blocks.plants.onionCrop;
import com.zivilon.cinder_loe.carriage.CarriageRoadRegistry;
import com.zivilon.cinder_loe.character.CharacterEventListener;
import com.zivilon.cinder_loe.character.CharacterRoleAPI;
import com.zivilon.cinder_loe.client.render.*;
@ -338,6 +339,7 @@ public class CinderLoE {
registerEntities();
modEventHandler = new CinderEventHandler();
LoEPotions.registerPotions();
CarriageRoadRegistry.init();
}
@Mod.EventHandler
@ -590,9 +592,9 @@ public class CinderLoE {
dough = new LOTRItemFood(1,0.0f, false).setPotionEffect(Potion.hunger.id, 5,0,100).setUnlocalizedName("lotr:dough").setTextureName("lotr:dough");
pasta = new LOTRItemFood(2,0.0f, false).setPotionEffect(Potion.hunger.id, 5,0,100).setUnlocalizedName("lotr:pasta").setTextureName("lotr:pasta");
pretzel = new LOTRItemFood(4,1.0f, false).setUnlocalizedName("lotr:pretzel").setTextureName("lotr:pretzel");
halva = new LOTRItemFood (7, 3.0f, false).setUnlocalizedName("lotr:halva").setTextureName("lotr:halva");
doner_kebab = new LOTRItemFood (6, 3.0f, false).setUnlocalizedName("lotr:doner_kebab").setTextureName("lotr:doner_kebab");
flatbread = new LOTRItemFood (3, 4.0f, false).setUnlocalizedName("lotr:flatbread").setTextureName("lotr:flatbread");
halva = new LOTRItemFood (7, 1.0f, false).setUnlocalizedName("lotr:halva").setTextureName("lotr:halva");
doner_kebab = new LOTRItemFood (8, 1.25f, false).setUnlocalizedName("lotr:doner_kebab").setTextureName("lotr:doner_kebab");
flatbread = new LOTRItemFood (3, 0.25f, false).setUnlocalizedName("lotr:flatbread").setTextureName("lotr:flatbread");
// honey = new LOTRItemFood(3, 0.4f, false).setPotionEffect(Potion.regeneration.id, 5, 0, 100).setUnlocalizedName("lotr:honey").setTextureName("lotr:honey");
spiceElven = new Item().setUnlocalizedName("lotr:spice_elven").setTextureName("lotr:spice_elven");
spiceHuman = new Item().setUnlocalizedName("lotr:spice_human").setTextureName("lotr:spice_human");

@ -2,13 +2,14 @@ package com.zivilon.cinder_loe.carriage;
public class CarriageDestination {
public final String name;
public final int x, y, z;
public final int dimension;
public CarriageDestination(String name, int x, int y, int z, int dimension) {
public final int x, y, z, dimension;
public final String road;
public CarriageDestination(String name, int x, int y, int z, int dimension, String road) {
this.name = name;
this.x = x;
this.y = y;
this.z = z;
this.dimension = dimension;
this.road = road;
}
}

@ -9,6 +9,7 @@ import net.minecraft.world.storage.MapStorage;
import java.util.*;
import java.util.function.BiPredicate;
import java.util.stream.Collectors;
public class CarriageDestinationsData extends WorldSavedData {
public static final String DATA_NAME = "carriage_destinations";
@ -33,8 +34,8 @@ public class CarriageDestinationsData extends WorldSavedData {
int y = tag.getInteger("Y");
int z = tag.getInteger("Z");
int dim = tag.getInteger("Dim");
int defaultCost = 50; // or whatever default you want
destinations.put(name, new CarriageDestination(name, x, y, z, dim));
String road = tag.getString("Road");
destinations.put(name, new CarriageDestination(name, x, y, z, dim, road));
}
}
@ -49,6 +50,7 @@ public class CarriageDestinationsData extends WorldSavedData {
tag.setInteger("Y", dest.y);
tag.setInteger("Z", dest.z);
tag.setInteger("Dim", dest.dimension);
String road = tag.getString("Road");
list.appendTag(tag);
}
nbt.setTag("Destinations", list);
@ -60,7 +62,7 @@ public class CarriageDestinationsData extends WorldSavedData {
}
public Map<String, CarriageDestination> getDestinations() {
return destinations;
return Collections.unmodifiableMap(destinations);
}
public static CarriageDestinationsData get(World world) {
@ -76,73 +78,37 @@ public class CarriageDestinationsData extends WorldSavedData {
return null;
}
public List<CarriageDestination> getNearestFour(double px, double pz) {
double skipRadius = 100;
Set<CarriageDestination> picked = new HashSet<>();
List<CarriageDestination> result = new ArrayList<>(4);
/**
* Return up to four nearest destinations reachable via the
* same road network as the point (px, pz). Only destinations whose
* road is connected (directly or indirectly) to the start road
* will be considered. Distances under skipRadius are skipped.
*/
// north
CarriageDestination best = null;
double bestDist = Double.MAX_VALUE;
for (CarriageDestination d : destinations.values()) {
if (picked.contains(d)) continue;
double dx = d.x - px, dz = d.z - pz;
double dist = Math.sqrt(dx*dx + dz*dz);
if (dist < skipRadius || dz >= 0) continue;
double measure = Math.abs(dz);
if (measure < bestDist) { bestDist = measure; best = d; }
}
if (best != null) { picked.add(best); result.add(best); }
public List<CarriageDestination> getNearestFour(double px, double pz, String startRoadId, CarriageRoadRegistry network) {
final double skipRadius = 100;
// south
best = null; bestDist = Double.MAX_VALUE;
for (CarriageDestination d : destinations.values()) {
if (picked.contains(d)) continue;
double dx = d.x - px, dz = d.z - pz;
double dist = Math.sqrt(dx*dx + dz*dz);
if (dist < skipRadius || dz <= 0) continue;
if (dz < bestDist) { bestDist = dz; best = d; }
}
if (best != null) { picked.add(best); result.add(best); }
// List of roads included, disconnected regions like Gulfen will not magically travel across the desert
Set<String> allowedRoads = network.reachableRoadIds(startRoadId);
// east
best = null; bestDist = Double.MAX_VALUE;
for (CarriageDestination d : destinations.values()) {
if (picked.contains(d)) continue;
double dx = d.x - px, dz = d.z - pz;
double dist = Math.sqrt(dx*dx + dz*dz);
if (dist < skipRadius || dx <= 0) continue;
if (dx < bestDist) { bestDist = dx; best = d; }
}
if (best != null) { picked.add(best); result.add(best); }
List<CarriageDestination> pool = destinations.values().stream()
.filter(d -> allowedRoads.contains(d.road))
.collect(Collectors.toList());
// west
best = null; bestDist = Double.MAX_VALUE;
for (CarriageDestination d : destinations.values()) {
if (picked.contains(d)) continue;
// Sort by distance from player
pool.sort(Comparator.comparingDouble(d -> {
double dx = d.x - px, dz = d.z - pz;
double dist = Math.sqrt(dx*dx + dz*dz);
if (dist < skipRadius || dx >= 0) continue;
double measure = Math.abs(dx);
if (measure < bestDist) { bestDist = measure; best = d; }
}
if (best != null) { picked.add(best); result.add(best); }
// fill remaining slots
List<CarriageDestination> sorted = new ArrayList<>(destinations.values());
sorted.sort(Comparator.comparingDouble(d -> {
double dx = d.x - px, dz = d.z - pz;
return Math.sqrt(dx*dx + dz*dz);
return Math.hypot(dx, dz);
}));
for (CarriageDestination d : sorted) {
if (result.size() >= 4) break;
// Pick up to 4, skip within radius
List<CarriageDestination> result = new ArrayList<>(4);
for (CarriageDestination d : pool) {
double dx = d.x - px, dz = d.z - pz;
double dist = Math.sqrt(dx*dx + dz*dz);
double dist = Math.hypot(dx, dz);
if (dist < skipRadius) continue;
if (!picked.contains(d)) {
picked.add(d);
result.add(d);
}
result.add(d);
if (result.size() == 4) break;
}
return result;

@ -1,14 +1,19 @@
package com.zivilon.cinder_loe.carriage;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CarriageRoad {
String name;
List<CarriageRoad> neighbors;
List<CarriageDestination> destinations;
public final String name;
public final List<CarriageRoad> neighbors = new ArrayList<>();
public final List<CarriageDestination> destinations = new ArrayList<>();
public CarriageRoad(String name) {
this.name = name;
}
}
Map<String, CarriageRoad> roads = new HashMap<>();

@ -0,0 +1,284 @@
package com.zivilon.cinder_loe.carriage;
import cpw.mods.fml.common.FMLLog;
import org.apache.logging.log4j.Level;
import java.util.*;
public class CarriageRoadRegistry {
public static final CarriageRoadRegistry INSTANCE = new CarriageRoadRegistry();
private static final Map<String, CarriageRoad> roads = new HashMap<>();
public static void init() {
FMLLog.log(Level.INFO, "[CinderLoE] Initializing carriage road registry…");
FMLLog.log(Level.INFO, "[CinderLoE] Registered %d roads", roads.size());
// create roads
for (String id : Arrays.asList(
"sea",
// North West
"shire","bree","tharbad","fornost","lonelands",
"towerhills","mithlond","bluedwarf",
"longdaer", "eregion", "enedwaith",
// Vales of Anduin
"anduin", "lothlorien", "dolguldur", "greenwood", "mirkwood", "brownlands", "greymountain",
// The East
"erebor", "dale", "ironhills", "wilderland", "rhun", "rhudel", "dorwinion",
//Mordor
"gorgoroth", "sauronsroad", "morgulvale", "nurn", "eastdesolation",
//Centerlands
"isen", "rohan", "wold", "anorien","ithilien", "lebennin", "dolamroth", "lamedon",
//Harad
"harondor", "khand", "harnennor", "southron", "umbar", "southgulf", "northgulf",
//Far Harad
"southjungle", "taurelonde", "centerjungle", "northjungle", "mangrove", "halftroll"
)) {
roads.put(id, new CarriageRoad(id));
}
// link neighbors
// North West
roads.get("shire").neighbors.addAll(Arrays.asList(
roads.get("bree"),
roads.get("towerhills"))
);
roads.get("enedwaith").neighbors.addAll(Arrays.asList(
roads.get("tharbad"),
roads.get("isen"))
);
roads.get("bree").neighbors.addAll(Arrays.asList(
roads.get("shire"),
roads.get("lonelands"),
roads.get("fornost"),
roads.get("tharbad"))
);
roads.get("lonelands").neighbors.addAll(Arrays.asList(
roads.get("bree"),
roads.get("anduin"))
);
roads.get("fornost").neighbors.add(
roads.get("bree")
);
roads.get("tharbad").neighbors.addAll(Arrays.asList(
roads.get("bree"),
roads.get("longdaer"),
roads.get("eregion"),
roads.get("enedwaith"))
);
roads.get("towerhills").neighbors.add(
roads.get("mithlond")
);
roads.get("mithlond").neighbors.addAll(Arrays.asList(
roads.get("towerhills"),
roads.get("bluedwarf"))
);
roads.get("bluedwarf").neighbors.add(
roads.get("mithlond")
);
//Vales of Anduin
roads.get("anduin").neighbors.addAll(Arrays.asList(
roads.get("lonelands"),
roads.get("greymountain"),
roads.get("brownlands"),
roads.get("dolguldur"))
);
roads.get("mirkwood").neighbors.addAll(Arrays.asList(
roads.get("anduin"),
roads.get("dale"))
);
roads.get("greenwood").neighbors.add(
roads.get("anduin")
);
roads.get("dolguldur").neighbors.addAll(Arrays.asList(
roads.get("brownlands"),
roads.get("anduin"))
);
roads.get("brownlands").neighbors.addAll(Arrays.asList(
roads.get("gorgoroth"),
roads.get("anduin"),
roads.get("wilderland"),
roads.get("ithilien"),
roads.get("dolguldur"))
);
roads.get("greymountain").neighbors.add(
roads.get("anduin")
);
// The East
roads.get("dale").neighbors.addAll(Arrays.asList(
roads.get("erebor"),
roads.get("ironhills"),
roads.get("wilderland"),
roads.get("rhun"))
);
roads.get("rhudel").neighbors.addAll(Arrays.asList(
roads.get("dorwinion"),
roads.get("sauronsroad"),
roads.get("rhun"))
);
roads.get("rhun").neighbors.addAll(Arrays.asList(
roads.get("dale"),
roads.get("rhudel"))
);
roads.get("dorwinion").neighbors.addAll(Arrays.asList(
roads.get("wilderland"),
roads.get("rhudel"))
);
roads.get("wilderland").neighbors.addAll(Arrays.asList(
roads.get("brownlands"),
roads.get("dorwinion"),
roads.get("dale"))
);
roads.get("erebor").neighbors.add(
roads.get("dale")
);
roads.get("ironhills").neighbors.add(
roads.get("dale")
);
//Mordor
roads.get("sauronsroad").neighbors.addAll(Arrays.asList(
roads.get("brownlands"),
roads.get("rhudel"),
roads.get("khand"),
roads.get("ithilien"),
roads.get("gorgoroth"))
);
roads.get("gorgoroth").neighbors.addAll(Arrays.asList(
roads.get("brownlands"),
roads.get("sauronsroad"),
roads.get("morgulvale"),
roads.get("nurn"))
);
roads.get("morgulvale").neighbors.addAll(Arrays.asList(
roads.get("ithilien"),
roads.get("gorgoroth"))
);
roads.get("nurn").neighbors.add(
roads.get("gorgoroth")
);
//Centerlands
roads.get("anorien").neighbors.addAll(Arrays.asList(
roads.get("rohan"),
roads.get("lebennin"),
roads.get("ithilien"))
);
roads.get("lebennin").neighbors.addAll(Arrays.asList(
roads.get("anorien"),
roads.get("dolamroth"),
roads.get("lamedon"),
roads.get("ithilien"))
);
roads.get("dolamroth").neighbors.add(
roads.get("lebennin")
);
roads.get("lamedon").neighbors.add(
roads.get("lebennin")
);
roads.get("rohan").neighbors.addAll(Arrays.asList(
roads.get("wold"),
roads.get("anorien"),
roads.get("isen"))
);
roads.get("wold").neighbors.add(
roads.get("rohan")
);
roads.get("isen").neighbors.addAll(Arrays.asList(
roads.get("enedwaith"),
roads.get("rohan"))
);
roads.get("ithilien").neighbors.addAll(Arrays.asList(
roads.get("anorien"),
roads.get("lebennin"),
roads.get("harondor"),
roads.get("sauronsroad"),
roads.get("morgulvale"))
);
//Harad
roads.get("northgulf").neighbors.add(
roads.get("southgulf")
);
roads.get("southgulf").neighbors.add(
roads.get("northgulf")
);
roads.get("southron").neighbors.add(
roads.get("umbar")
);
roads.get("umbar").neighbors.addAll(Arrays.asList(
roads.get("harnennor"),
roads.get("southron"))
);
roads.get("harnennor").neighbors.addAll(Arrays.asList(
roads.get("harondor"),
roads.get("khand"),
roads.get("umbar"))
);
roads.get("harondor").neighbors.addAll(Arrays.asList(
roads.get("harnennor"),
roads.get("ithilien"))
);
roads.get("khand").neighbors.addAll(Arrays.asList(
roads.get("harnennor"),
roads.get("sauronsroad"))
);
//Far Harad
roads.get("centerjungle").neighbors.addAll(Arrays.asList(
roads.get("southjungle"),
roads.get("northjungle"),
roads.get("mangrove"),
roads.get("taurelonde"),
roads.get("halftroll"))
);
roads.get("taurelonde").neighbors.addAll(Arrays.asList(
roads.get("centerjungle"),
roads.get("northjungle"))
);
roads.get("northjungle").neighbors.addAll(Arrays.asList(
roads.get("mangrove"),
roads.get("centerjungle"),
roads.get("taurelonde"),
roads.get("halftroll"))
);
roads.get("mangrove").neighbors.addAll(Arrays.asList(
roads.get("northjungle"),
roads.get("centerjungle"),
roads.get("halftroll"))
);
roads.get("halftroll").neighbors.addAll(Arrays.asList(
roads.get("northjungle"),
roads.get("centerjungle"),
roads.get("mangrove"))
);
roads.get("southjungle").neighbors.add(
roads.get("centerjungle")
);
}
public static CarriageRoad getRoad(String name) {
return roads.get(name);
}
public static Collection<CarriageRoad> allRoads() {
return roads.values();
}
public static Set<String> reachableRoadIds(String startRoadId) {
Set<String> seen = new HashSet<>();
Deque<String> queue = new ArrayDeque<>();
queue.add(startRoadId);
seen.add(startRoadId);
while (!queue.isEmpty()) {
String current = queue.removeFirst();
CarriageRoad road = CarriageRoadRegistry.getRoad(current);
if (road == null) continue;
for (CarriageRoad nbr : road.neighbors) {
if (seen.add(nbr.name)) {
queue.addLast(nbr.name);
}
}
}
return seen;
}
}

@ -80,8 +80,13 @@ public class CarriageUtils {
}
public static int calculateCost(double playerX, double playerZ, CarriageDestination dest) {
if (dest.road.equals("sea")) {
double dist = Math.sqrt(Math.pow(dest.x - playerX, 2) + Math.pow(dest.z - playerZ, 2));
int cost = 500 + Math.max(1, (int)(dist / 500)); // replace 10 with another hardcoded value
return cost;
}
double dist = Math.sqrt(Math.pow(dest.x - playerX, 2) + Math.pow(dest.z - playerZ, 2));
int cost = Math.max(1, (int)(dist / 50)); // replace 10 with another hardcoded value
int cost = Math.max(1, (int)(dist / 100)); // replace 10 with another hardcoded value
return cost;
}

@ -2,6 +2,7 @@ package com.zivilon.cinder_loe.command;
import com.zivilon.cinder_loe.carriage.CarriageDestination;
import com.zivilon.cinder_loe.carriage.CarriageDestinationsData;
import com.zivilon.cinder_loe.carriage.CarriageRoadRegistry;
import com.zivilon.cinder_loe.network.PacketOpenCarriageGui;
import lotr.common.network.LOTRPacketHandler;
import net.minecraft.command.CommandBase;
@ -26,27 +27,54 @@ public class CommandOpenCarriageMenu extends CommandBase {
}
@Override
public void processCommand(ICommandSender sender, String[] args) {
public void processCommand(ICommandSender sender, String[] args) throws CommandException {
if (!(sender instanceof EntityPlayerMP)) {
throw new CommandException("Must be run by a player.");
}
EntityPlayerMP player = (EntityPlayerMP) sender;
World world = player.worldObj;
CarriageDestinationsData data = CarriageDestinationsData.get(world);
List<CarriageDestination> nearest = data.getNearestFour(player.posX, player.posZ);
if (data == null) {
throw new CommandException("Carriage data unavailable.");
}
// 1) first get the absolute nearest stops, ignoring roads
List<CarriageDestination> rawNearby = data.getNearestFour(player.posX, player.posZ, "", CarriageRoadRegistry.INSTANCE);
if (rawNearby.isEmpty()) {
throw new CommandException("No nearby carriage stops found.");
}
// 2) grab the road of the very nearest
String startRoad = rawNearby.get(0).road;
// 3) now get up to 4 stops on that road and its neighbors
List<CarriageDestination> nearest = data.getNearestFour(
player.posX, player.posZ,
startRoad,
/* pass your registry singleton, not `new` */ CarriageRoadRegistry.INSTANCE
);
// if you dont have an instance() method, just call the static methods inside getNearestFour
if (nearest.isEmpty()) {
throw new CommandException("No stops on your road or its neighbors.");
}
List<String> names = new ArrayList<>();
List<Integer> costs = new ArrayList<>();
// 4) build your packet
List<String> names = new ArrayList<>();
List<Integer> costs = new ArrayList<>();
List<String> roads = new ArrayList<>();
for (CarriageDestination dest : nearest) {
double dist = Math.sqrt(Math.pow(dest.x - player.posX, 2) + Math.pow(dest.z - player.posZ, 2));
int cost = Math.max(1, (int)(dist / 50));
names.add(dest.name);
costs.add(cost);
for (CarriageDestination d : nearest) {
double dx = d.x - player.posX;
double dz = d.z - player.posZ;
int cost = Math.max(1, (int)(Math.hypot(dx, dz) / 50));
names .add(d.name);
costs .add(cost);
roads .add(d.road);
}
LOTRPacketHandler.networkWrapper.sendTo(new PacketOpenCarriageGui(names, costs), player);
LOTRPacketHandler.networkWrapper
.sendTo(new PacketOpenCarriageGui(names, costs, roads), player);
}
}

@ -2,6 +2,7 @@ package com.zivilon.cinder_loe.command;
import com.zivilon.cinder_loe.carriage.CarriageDestination;
import com.zivilon.cinder_loe.carriage.CarriageDestinationsData;
import com.zivilon.cinder_loe.carriage.CarriageRoadRegistry;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
@ -20,34 +21,44 @@ public class CommandSetDestination extends CommandBase {
@Override
public String getCommandUsage(ICommandSender sender) {
return "/set_destination \"Destination Name\"";
return "/set_destination \"Destination Name\" roadId";
}
@Override
public void processCommand(ICommandSender sender, String[] args) {
if (args.length < 1) {
throw new WrongUsageException("Usage: /set_destination \"Destination Name\"");
public void processCommand(ICommandSender sender, String[] args) throws CommandException {
if (args.length < 2) {
throw new WrongUsageException(getCommandUsage(sender));
}
String name = StringUtils.join(args, " ");
World world = sender.getEntityWorld();
// last arg is the road ID
String roadId = args[args.length - 1].toLowerCase();
if (CarriageRoadRegistry.getRoad(roadId) == null) {
throw new CommandException("Unknown road ID: " + roadId);
}
// everything before is the destination name
String name = StringUtils.join(args, " ", 0, args.length - 1);
if (!(sender instanceof EntityPlayerMP)) {
throw new CommandException("Must be run by a player.");
}
EntityPlayerMP player = (EntityPlayerMP) sender;
int x = (int) player.posX;
int y = (int) player.posY;
int z = (int) player.posZ;
World world = player.worldObj;
int x = (int) Math.floor(player.posX);
int y = (int) Math.floor(player.posY);
int z = (int) Math.floor(player.posZ);
int dim = player.dimension;
CarriageDestinationsData data = CarriageDestinationsData.get(world);
if (data != null) {
data.addDestination(new CarriageDestination(name, x, y, z, dim));
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Destination '" + name + "' saved."));
} else {
if (data == null) {
throw new CommandException("Failed to access destination storage.");
}
data.addDestination(new CarriageDestination(name, x, y, z, dim, roadId));
sender.addChatMessage(new ChatComponentText(
EnumChatFormatting.YELLOW + "Destination '" + name + "' on road '" + roadId + "' saved."
));
}
}

@ -15,12 +15,14 @@ import java.util.List;
public class PacketOpenCarriageGui implements IMessage {
private List<String> names = new ArrayList<>();
private List<Integer> costs = new ArrayList<>();
private List<String> road = new ArrayList<>();
public PacketOpenCarriageGui() {}
public PacketOpenCarriageGui(List<String> names, List<Integer> costs) {
public PacketOpenCarriageGui(List<String> names, List<Integer> costs, List<String> road) {
this.names = names;
this.costs = costs;
this.road = road;
}
@Override
@ -29,6 +31,7 @@ public class PacketOpenCarriageGui implements IMessage {
for (int i = 0; i < names.size(); i++) {
ByteBufUtils.writeUTF8String(buf, names.get(i));
buf.writeInt(costs.get(i));
ByteBufUtils.writeUTF8String(buf, road.get(i));
}
}
@ -38,6 +41,7 @@ public class PacketOpenCarriageGui implements IMessage {
for (int i = 0; i < count; i++) {
names.add(ByteBufUtils.readUTF8String(buf));
costs.add(buf.readInt());
road.add(ByteBufUtils.readUTF8String(buf));
}
}
@ -49,7 +53,7 @@ public class PacketOpenCarriageGui implements IMessage {
public void run() {
List<CarriageDestination> dests = new ArrayList<>();
for (int i = 0; i < msg.names.size(); i++) {
dests.add(new CarriageDestination(msg.names.get(i), 0, 0, 0, 0)); // dummy pos
dests.add(new CarriageDestination(msg.names.get(i), 0, 0, 0, 0, msg.road.get(i))); // dummy pos
}
Minecraft.getMinecraft().displayGuiScreen(new GuiCarriageMenu(dests, msg.costs));
}

Loading…
Cancel
Save