Skip to content

Commit

Permalink
Merge pull request #105 from railcraft-reborn/goggles
Browse files Browse the repository at this point in the history
Change aura by key
  • Loading branch information
Edivad99 committed Sep 5, 2023
2 parents 70cd7e7 + 9b05680 commit ffdf849
Show file tree
Hide file tree
Showing 15 changed files with 181 additions and 99 deletions.
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// 1.20.1 2023-08-28T12:04:48.331781 Languages: en_us
de762e91a530cb57804e562cb066132c7827113e assets/railcraft/lang/en_us.json
// 1.20.1 2023-09-04T20:53:55.046849 Languages: en_us
9f0012e8e466d4e0775e6550ef59e1001ffef02e assets/railcraft/lang/en_us.json
2 changes: 2 additions & 0 deletions src/generated/resources/assets/railcraft/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -657,6 +657,8 @@
"jei.railcraft.desc.token_signal": "This signal can be used to define an area to monitor for carts entering and leaving. It pairs into a net of signals, with no particular limit to the number of signals defining the area. Recommended for junctions and diagonals. It will send the resulting aspect to a paired Receiver.",
"jei.railcraft.desc.tunnel_bore": "Machine designed for digging tunnels and laying track.",
"jei.railcraft.tips.crusher": "(%s%% chance)",
"key.railcraft.category": "Railcraft Reborn",
"key.railcraft.change_aura": "Change Aura",
"manual.railcraft.routing_table.page.1": "The Routing Table when placed in a Routing Detector or Switch will define a set of rules that are used to match against any passing Locomotive. These rules are define using a simple logic syntax that allows you to create rules as simple or complex as you like. The syntax is a Prefix Notation script, the Operators are followed by the Operands. Only one keyword is allowed per line. If no Operator is specified, OR is assumed. Routing Tables can be copied by placing two or more in a crafting grid.",
"manual.railcraft.routing_table.page.10": "Result:\n The script on the previous page will\n match a Locomotive with a destination\n of \"TheFarLands/Milliways\",\n or that is painted black and red,\n or that has a destination of\n \"SecretHideout/OceanEntrance\",\n but only if its not owned by Steve.\n",
"manual.railcraft.routing_table.page.11": "Regular Expressions:\n Some Conditions support\n Regular Expressions.\n To use a regex, add a '?' before the '='.\n Rules are standard Java Patterns.\nSupporting Conditions:\n Dest, Name\nExample:\n Dest?=.*Hill\n",
Expand Down
1 change: 1 addition & 0 deletions src/main/java/mods/railcraft/Railcraft.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@
public class Railcraft {

public static final String ID = "railcraft";
public static final String NAME = "Railcraft Reborn";
public static final boolean BETA = true;

static {
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/mods/railcraft/Translations.java
Original file line number Diff line number Diff line change
Expand Up @@ -580,6 +580,11 @@ public static class ChargeMeter {
public static final String PRODUCER = makeKey("charge_meter", "producer");
}

public static class KeyBinding {
public static final String CATEGORY = makeKey("key", "category");
public static final String CHANGE_AURA = makeKey("key", "change_aura");
}

public static String makeKey(String type, String name) {
return type + "." + Railcraft.ID + "." + name;
}
Expand Down
20 changes: 18 additions & 2 deletions src/main/java/mods/railcraft/client/ClientManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
import mods.railcraft.particle.RailcraftParticleTypes;
import mods.railcraft.world.inventory.ManualRollingMachineMenu;
import mods.railcraft.world.inventory.RailcraftMenuTypes;
import mods.railcraft.world.item.GogglesItem;
import mods.railcraft.world.item.LocomotiveItem;
import mods.railcraft.world.item.RailcraftItems;
import mods.railcraft.world.level.block.ForceTrackEmitterBlock;
Expand All @@ -61,7 +62,9 @@
import net.minecraft.world.level.GrassColor;
import net.minecraftforge.client.event.ClientPlayerNetworkEvent;
import net.minecraftforge.client.event.EntityRenderersEvent;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.client.event.RegisterColorHandlersEvent;
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
import net.minecraftforge.client.event.RegisterParticleProvidersEvent;
import net.minecraftforge.client.event.RenderLevelStageEvent;
import net.minecraftforge.common.MinecraftForge;
Expand All @@ -85,6 +88,7 @@ public static void init(IEventBus modEventBus) {
modEventBus.addListener(ClientManager::handleParticleRegistration);
modEventBus.addListener(ClientManager::handleRegisterRenderers);
modEventBus.addListener(ClientManager::handleRegisterLayerDefinitions);
modEventBus.addListener(ClientManager::handleKeyRegister);
MinecraftForge.EVENT_BUS.register(ClientManager.class);

shuntingAuraRenderer = new ShuntingAuraRenderer();
Expand Down Expand Up @@ -187,6 +191,11 @@ private static void handleRegisterLayerDefinitions(
RailcraftLayerDefinitions.createRoots(event::registerLayerDefinition);
}


private static void handleKeyRegister(RegisterKeyMappingsEvent event) {
event.register(KeyBinding.CHANGE_AURA_KEY);
}

// ================================================================================
// Forge Events
// ================================================================================
Expand All @@ -201,7 +210,7 @@ static void handleClientTick(TickEvent.ClientTickEvent event) {

@SubscribeEvent
static void handleRenderWorldLast(RenderLevelStageEvent event) {
shuntingAuraRenderer.render(event.getPartialTick(), event.getPoseStack());
shuntingAuraRenderer.render(event.getPoseStack(), event.getCamera(), event.getPartialTick());
}

@SubscribeEvent
Expand Down Expand Up @@ -252,7 +261,7 @@ static void handleClientLoggedIn(ClientPlayerNetworkEvent.LoggingIn event) {
}

@SubscribeEvent
static void onItemTooltip(ItemTooltipEvent event) {
static void handleItemTooltip(ItemTooltipEvent event) {
var itemStack = event.getItemStack();
var tag = itemStack.getTag();
if (tag == null) {
Expand All @@ -264,4 +273,11 @@ static void onItemTooltip(ItemTooltipEvent event) {
.withStyle(ChatFormatting.YELLOW));
}
}

@SubscribeEvent
static void handleKeyInput(InputEvent.Key event) {
if (KeyBinding.CHANGE_AURA_KEY.consumeClick()) {
GogglesItem.changeAuraByKey(Minecraft.getInstance().player);
}
}
}
14 changes: 14 additions & 0 deletions src/main/java/mods/railcraft/client/KeyBinding.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package mods.railcraft.client;

import org.lwjgl.glfw.GLFW;
import com.mojang.blaze3d.platform.InputConstants;
import mods.railcraft.Translations;
import net.minecraft.client.KeyMapping;
import net.minecraftforge.client.settings.KeyConflictContext;

public class KeyBinding {

public static final KeyMapping CHANGE_AURA_KEY =
new KeyMapping(Translations.KeyBinding.CHANGE_AURA, KeyConflictContext.IN_GAME,
InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_G, Translations.KeyBinding.CATEGORY);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import java.util.Collection;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import mods.railcraft.client.util.RenderUtil;
import mods.railcraft.network.play.LinkedCartsMessage;
import mods.railcraft.world.item.GogglesItem;
import mods.railcraft.world.item.RailcraftItems;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.world.entity.EquipmentSlot;
Expand All @@ -14,7 +16,6 @@

public class ShuntingAuraRenderer {

private final Minecraft minecraft = Minecraft.getInstance();
private Collection<LinkedCartsMessage.LinkedCart> linkedCarts;

public void clearCarts() {
Expand All @@ -25,62 +26,58 @@ public void setLinkedCarts(Collection<LinkedCartsMessage.LinkedCart> linkedCarts
this.linkedCarts = linkedCarts;
}

public void render(float partialTick, PoseStack poseStack) {
public void render(PoseStack poseStack, Camera mainCamera, float partialTick) {
if (this.linkedCarts == null) {
return;
}

final var player = this.minecraft.player;

var player = Minecraft.getInstance().player;
var goggles = player.getItemBySlot(EquipmentSlot.HEAD);
if (goggles.getItem() == RailcraftItems.GOGGLES.get()) {
if (goggles.is(RailcraftItems.GOGGLES.get())) {
var aura = GogglesItem.getAura(goggles);
if (aura == GogglesItem.Aura.SHUNTING) {
poseStack.pushPose();
{
var projectedView = this.minecraft.gameRenderer.getMainCamera().getPosition();
poseStack.translate(-projectedView.x, -projectedView.y, -projectedView.z);

for (var linkedCart : this.linkedCarts) {
var entity = this.minecraft.level.getEntity(linkedCart.entityId());
if (!(entity instanceof AbstractMinecart) || linkedCart.trainId() == null) {
continue;
}
AbstractMinecart cart = (AbstractMinecart) entity;

var consumer =
this.minecraft.renderBuffers().bufferSource().getBuffer(RenderType.lines());
var pose = poseStack.last();

final int color = linkedCart.trainId().hashCode();
float red = (float) (color >> 16 & 255) / 255.0F;
float green = (float) (color >> 8 & 255) / 255.0F;
float blue = (float) (color & 255) / 255.0F;

final var cartPosition = cart.getPosition(partialTick);
final float cartX = (float) cartPosition.x();
final float cartY = (float) cartPosition.y();
final float cartZ = (float) cartPosition.z();

consumer
.vertex(pose.pose(), cartX, cartY, cartZ)
.color(red, green, blue, 1.0F)
.normal(pose.normal(), 0.0F, 0.0F, 0.0F)
.endVertex();

consumer
.vertex(pose.pose(), cartX, cartY + 2.0F, cartZ)
.color(red, green, blue, 1.0F)
.normal(pose.normal(), 0.0F, 0.0F, 0.0F)
.endVertex();

this.renderLink(this.minecraft.level, cartX, cartY, cartZ, linkedCart.linkAId(), red,
green, blue, partialTick, consumer, pose);
this.renderLink(this.minecraft.level, cartX, cartY, cartZ, linkedCart.linkBId(), red,
green, blue, partialTick, consumer, pose);

this.minecraft.renderBuffers().bufferSource().endBatch();
var projectedView = mainCamera.getPosition();
poseStack.translate(-projectedView.x, -projectedView.y, -projectedView.z);

for (var linkedCart : this.linkedCarts) {
var entity = player.level().getEntity(linkedCart.entityId());
if (!(entity instanceof AbstractMinecart cart) || linkedCart.trainId() == null) {
continue;
}

var consumer =
Minecraft.getInstance().renderBuffers().bufferSource().getBuffer(RenderType.lines());
var pose = poseStack.last();

final int color = linkedCart.trainId().hashCode();
float red = RenderUtil.getRed(color);
float green = RenderUtil.getGreen(color);
float blue = RenderUtil.getBlue(color);

final var cartPosition = cart.getPosition(partialTick);
final float cartX = (float) cartPosition.x();
final float cartY = (float) cartPosition.y();
final float cartZ = (float) cartPosition.z();

consumer
.vertex(pose.pose(), cartX, cartY, cartZ)
.color(red, green, blue, 1.0F)
.normal(pose.normal(), 0.0F, 0.0F, 0.0F)
.endVertex();

consumer
.vertex(pose.pose(), cartX, cartY + 2.0F, cartZ)
.color(red, green, blue, 1.0F)
.normal(pose.normal(), 0.0F, 0.0F, 0.0F)
.endVertex();

this.renderLink(player.level(), cartX, cartY, cartZ, linkedCart.linkAId(), red,
green, blue, partialTick, consumer, pose);
this.renderLink(player.level(), cartX, cartY, cartZ, linkedCart.linkBId(), red,
green, blue, partialTick, consumer, pose);

Minecraft.getInstance().renderBuffers().bufferSource().endBatch();
}
poseStack.popPose();
}
Expand All @@ -94,7 +91,7 @@ private void renderLink(Level level, float cartX, float cartY, float cartZ, int
return;
}

var cartA = this.minecraft.level.getEntity(cartId);
var cartA = level.getEntity(cartId);
if (cartA == null) {
return;
}
Expand Down
12 changes: 9 additions & 3 deletions src/main/java/mods/railcraft/data/RailcraftLanguageProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ public RailcraftLanguageProvider(PackOutput packOutput) {

@Override
protected void addTranslations() {
this.add(Translations.Tab.RAILCRAFT, "Railcraft Reborn");
this.add(Translations.Tab.RAILCRAFT_OUTFITTED_TRACKS, "Railcraft Reborn Outfitted Tracks");
this.add(Translations.Tab.RAILCRAFT_DECORATIVE_BLOCKS, "Railcraft Reborn Decorative Blocks");
this.add(Translations.Tab.RAILCRAFT, Railcraft.NAME);
this.add(Translations.Tab.RAILCRAFT_OUTFITTED_TRACKS, Railcraft.NAME + " Outfitted Tracks");
this.add(Translations.Tab.RAILCRAFT_DECORATIVE_BLOCKS, Railcraft.NAME + " Decorative Blocks");

this.blockTranslations();
this.itemTranslations();
Expand All @@ -57,6 +57,7 @@ protected void addTranslations() {
this.damageSourceTranslations();
this.routingTableTranslations();
this.chargeMeterTranslations();
this.keyBindingTranslations();
}

private void blockTranslations() {
Expand Down Expand Up @@ -1208,6 +1209,11 @@ private void chargeMeterTranslations() {
Eff: %s%%""");
}

private void keyBindingTranslations() {
this.add(Translations.KeyBinding.CATEGORY, Railcraft.NAME);
this.add(Translations.KeyBinding.CHANGE_AURA, "Change Aura");
}

private void addFluidType(Supplier<? extends FluidType> key, String name) {
this.add(key.get(), name);
}
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/mods/railcraft/network/NetworkChannel.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,12 @@
import mods.railcraft.network.play.SetSwitchTrackMotorAttributesMessage;
import mods.railcraft.network.play.SetSwitchTrackRouterAttributesMessage;
import mods.railcraft.network.play.SyncWidgetMessage;
import mods.railcraft.network.play.UpdateAuraByKeyMessage;
import net.minecraft.core.BlockPos;
import net.minecraft.network.protocol.Packet;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.level.Level;
import net.minecraftforge.network.NetworkDirection;
Expand Down Expand Up @@ -158,6 +162,12 @@ public void registerMessages(SimpleChannel simpleChannel) {
.decoder(SetMaintenanceMinecartAttributesMessage::decode)
.consumerMainThread(SetMaintenanceMinecartAttributesMessage::handle)
.add();
simpleChannel
.messageBuilder(UpdateAuraByKeyMessage.class, 0x12, NetworkDirection.PLAY_TO_SERVER)
.encoder(UpdateAuraByKeyMessage::encode)
.decoder(UpdateAuraByKeyMessage::decode)
.consumerMainThread(UpdateAuraByKeyMessage::handle)
.add();
}
};

Expand Down Expand Up @@ -213,6 +223,13 @@ public void sendToDimension(Object packet, ResourceKey<Level> dimensionId) {
this.simpleChannel.send(PacketDistributor.DIMENSION.with(() -> dimensionId), packet);
}

@SuppressWarnings("deprecation")
public static void sendToTrackingChunk(Packet<?> packet, ServerLevel level, BlockPos blockPos) {
if (level.hasChunkAt(blockPos)) {
PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(blockPos)).send(packet);
}
}

public static void registerAll() {
if (!registered) {
for (var channel : values()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package mods.railcraft.network.play;

import java.util.function.Supplier;
import mods.railcraft.world.item.GogglesItem;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraftforge.network.NetworkEvent;

public record UpdateAuraByKeyMessage(CompoundTag tag) {

public void encode(FriendlyByteBuf out) {
out.writeNbt(tag);
}

public static UpdateAuraByKeyMessage decode(FriendlyByteBuf in) {
return new UpdateAuraByKeyMessage(in.readNbt());
}

public boolean handle(Supplier<NetworkEvent.Context> context) {
var player = context.get().getSender();
var itemStack = player.getItemBySlot(EquipmentSlot.HEAD);
if (itemStack.getItem() instanceof GogglesItem) {
itemStack.setTag(tag);
}
return true;
}
}
16 changes: 0 additions & 16 deletions src/main/java/mods/railcraft/util/NetworkUtil.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@
import mods.railcraft.util.PlayerUtil;
import mods.railcraft.util.container.ContainerTools;
import mods.railcraft.world.damagesource.RailcraftDamageSources;
import mods.railcraft.world.entity.vehicle.MinecartUtil;
import mods.railcraft.world.entity.vehicle.Directional;
import mods.railcraft.world.entity.vehicle.MinecartUtil;
import mods.railcraft.world.entity.vehicle.RailcraftMinecart;
import mods.railcraft.world.item.LocomotiveItem;
import mods.railcraft.world.item.RailcraftItems;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import mods.railcraft.advancements.RailcraftCriteriaTriggers;
import mods.railcraft.api.carts.RollingStock;
import mods.railcraft.api.item.Crowbar;
import mods.railcraft.world.entity.vehicle.MinecartUtil;
import mods.railcraft.world.entity.vehicle.Directional;
import mods.railcraft.world.entity.vehicle.MinecartUtil;
import mods.railcraft.world.entity.vehicle.SeasonalCart;
import mods.railcraft.world.entity.vehicle.TrackRemover;
import mods.railcraft.world.entity.vehicle.TunnelBore;
Expand Down

0 comments on commit ffdf849

Please sign in to comment.