Skip to content

Commit

Permalink
Energy minecart
Browse files Browse the repository at this point in the history
  • Loading branch information
Edivad99 committed Mar 14, 2024
1 parent 1b24167 commit 9720dbc
Show file tree
Hide file tree
Showing 39 changed files with 451 additions and 87 deletions.
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// 1.20.1 2023-06-29T09:27:06.401274 atlases generator for railcraft
b73fc94a6ff6a47ae7916b24e9f0a7f7ba2bd7fd assets/minecraft/atlases/blocks.json
// 1.20.1 2024-03-14T09:36:47.045308 atlases generator for railcraft
5d6c5eb6b85c11266e4fb7771a607f15e770cf62 assets/minecraft/atlases/blocks.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.20.1 2024-02-23T15:43:40.197737703 Recipes
// 1.20.1 2024-03-14T15:02:05.554829 Recipes
4dcec5127078324130ee2a0784057108c8aadc01 data/minecraft/advancements/recipes/misc/gunpowder.json
4a6e67942b0734508f9373351ab324c6cdd81244 data/minecraft/advancements/recipes/misc/lead_ingot_from_blasting_deepslate_lead_ore.json
33c838f63222211d4d44845f4f963dfe2cec8fc9 data/minecraft/advancements/recipes/misc/lead_ingot_from_blasting_lead_ore.json
Expand Down Expand Up @@ -235,6 +235,7 @@ b40af7a0f495242e9782255d5db848f0745cf0f8 data/railcraft/advancements/recipes/mis
9fffad6a1cf7b0079d3ab7dff99ee337bdcd903e data/railcraft/advancements/recipes/misc/elevator_track.json
0017c1273915eee3de746dcaf7547da3c0742c20 data/railcraft/advancements/recipes/misc/embarking_track_kit.json
d495f6389d5ab1eda5bbac73e1acffe39768d142 data/railcraft/advancements/recipes/misc/empty_detector.json
a7282ded93a44f8de9245d9a55a3b68b82b4c4b4 data/railcraft/advancements/recipes/misc/energy_minecart.json
99da97e7da7ae081359f4532d5395e3bf7898f23 data/railcraft/advancements/recipes/misc/etched_abyssal_stone.json
0f6c53b8ac75e5f53efe37d310458d93edb0e1e6 data/railcraft/advancements/recipes/misc/etched_quarried_stone.json
e3cf00162578262e9697c430917d79e7031e9fde data/railcraft/advancements/recipes/misc/feed_station.json
Expand Down Expand Up @@ -843,6 +844,7 @@ a8c0a5f2dc50251dc00aceb95f80006cdbad53cf data/railcraft/recipes/electric_whistle
230be9016e94850fa5ed3136fbbdfe360d4c2956 data/railcraft/recipes/elevator_track.json
f9d2fd1ffaf7c6362782769abcb1e9122ca33a74 data/railcraft/recipes/embarking_track_kit.json
2f1b124fb9f98f905edb8cbcf7fe90715eecccc3 data/railcraft/recipes/empty_detector.json
18e2eec91bcc53a047c35c17b3325555db6a2238 data/railcraft/recipes/energy_minecart.json
b1a1d04274efcb4beadc2c3329347a8a156a590b data/railcraft/recipes/etched_abyssal_stone.json
2080094489d826f581d88b243dd1f697d232ba57 data/railcraft/recipes/etched_quarried_stone.json
1246bbb09d8c84b3c57df3cd0d0f0c9228e16e74 data/railcraft/recipes/feed_station.json
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// 1.20.1 2024-03-13T13:11:54.703285 Languages: en_us
05e8a7cd6ca20cd8f6103a563640bbf6779668a8 assets/railcraft/lang/en_us.json
// 1.20.1 2024-03-14T10:02:21.002961 Languages: en_us
fafdc29c1651188bf7e6cd558f854b196852895b assets/railcraft/lang/en_us.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.20.1 2024-02-21T21:12:25.894738 Item Models: railcraft
// 1.20.1 2024-03-13T20:47:54.740883 Item Models: railcraft
dbbe28cea0e96f0929204fe4efd5f4923d9f3d43 assets/railcraft/models/item/activator_track_kit.json
e0d7f6014a1a00e1f619d687db8dd4e18748da57 assets/railcraft/models/item/advanced_rail.json
c13cd9f012c8ef8f084877066381fd641ce1ba81 assets/railcraft/models/item/bag_of_cement.json
Expand Down Expand Up @@ -44,6 +44,7 @@ ab7fa5102406bed3c4aed220e8d0f2fdec0593d4 assets/railcraft/models/item/dumping_tr
41ee85b2c2ad5f24241b2a839756dfca91e25515 assets/railcraft/models/item/electric_rail.json
2d1c8a424573c2795b1c8605aff3d9bd61ee69b8 assets/railcraft/models/item/embarking_track_kit.json
245bf48c8cedd8733bfceca3d1fd28bd7e84a442 assets/railcraft/models/item/ender_dust.json
a590412bb0393351453472840534ea73d7a8cf87 assets/railcraft/models/item/energy_minecart.json
4e24c96a71c9bdd904a6f0804136a05a8b5da314 assets/railcraft/models/item/gated_track_kit.json
949a11da583e83375d0b836c68c4b9fae02f32a7 assets/railcraft/models/item/goggles.json
482a065ec291f6cf851961bc8a70ac1b6fc7af05 assets/railcraft/models/item/gold_electrode.json
Expand Down
5 changes: 5 additions & 0 deletions src/generated/resources/assets/minecraft/atlases/blocks.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@
"type": "minecraft:directory",
"prefix": "entity/fluid_loader/",
"source": "entity/fluid_loader"
},
{
"type": "minecraft:directory",
"prefix": "entity/minecart/",
"source": "entity/minecart"
}
]
}
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 @@ -475,6 +475,7 @@
"entity.minecraft.villager.railcraft.trackman": "Trackman",
"entity.railcraft.creative_locomotive": "Creative Locomotive",
"entity.railcraft.electric_locomotive": "Electric Locomotive",
"entity.railcraft.energy_minecart": "Minecart with Energy cell",
"entity.railcraft.steam_locomotive": "Steam Locomotive",
"entity.railcraft.tank_minecart": "Minecart with Tank",
"entity.railcraft.track_layer": "Track Layer Cart",
Expand Down Expand Up @@ -546,6 +547,7 @@
"item.railcraft.electric_rail": "Electric Rail",
"item.railcraft.embarking_track_kit": "Embarking Track Kit",
"item.railcraft.ender_dust": "Ender Dust",
"item.railcraft.energy_minecart": "Minecart with Energy cell",
"item.railcraft.gated_track_kit": "Gated Track Kit",
"item.railcraft.goggles": "Trackman's Goggles",
"item.railcraft.gold_electrode": "Gold Electrode",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "railcraft:item/energy_minecart"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_lead_ingot": {
"conditions": {
"items": [
{
"items": [
"railcraft:lead_ingot"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "railcraft:energy_minecart"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_lead_ingot",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"railcraft:energy_minecart"
]
},
"sends_telemetry_event": false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"a": {
"tag": "forge:ingots/lead"
},
"b": {
"item": "minecraft:redstone_block"
},
"c": {
"item": "minecraft:minecart"
}
},
"pattern": [
"aba",
"bcb",
"aba"
],
"result": {
"item": "railcraft:energy_minecart"
},
"show_notification": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import mods.railcraft.api.carts.RollingStock;
import mods.railcraft.api.charge.Charge;
import mods.railcraft.api.charge.ChargeCartStorage;
import mods.railcraft.world.entity.vehicle.EnergyMinecart;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.vehicle.AbstractMinecart;
Expand Down Expand Up @@ -63,6 +64,7 @@ public void tick(AbstractMinecart owner) {
drewFromTrack--;
} else if (energy < (capacity * 0.5) && clock % DRAW_INTERVAL == 0) {
RollingStock.getOrThrow(owner).train().entities()
.filter(x -> x instanceof EnergyMinecart)
.flatMap(c -> c.getCapability(ForgeCapabilities.ENERGY)
.map(Stream::of)
.orElse(Stream.empty()))
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/mods/railcraft/client/ClientManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import mods.railcraft.client.gui.screen.inventory.CrusherScreen;
import mods.railcraft.client.gui.screen.inventory.DumpingTrackScreen;
import mods.railcraft.client.gui.screen.inventory.ElectricLocomotiveScreen;
import mods.railcraft.client.gui.screen.inventory.EnergyMinecartScreen;
import mods.railcraft.client.gui.screen.inventory.FeedStationScreen;
import mods.railcraft.client.gui.screen.inventory.FluidFueledSteamBoilerScreen;
import mods.railcraft.client.gui.screen.inventory.FluidManipulatorScreen;
Expand Down Expand Up @@ -145,6 +146,7 @@ private static void handleClientSetup(FMLClientSetupEvent event) {
MenuScreens.register(RailcraftMenuTypes.CART_DISPENSER.get(), CartDispenserScreen::new);
MenuScreens.register(RailcraftMenuTypes.TRAIN_DISPENSER.get(), TrainDispenserScreen::new);
MenuScreens.register(RailcraftMenuTypes.TANK_MINECART.get(), TankMinecartScreen::new);
MenuScreens.register(RailcraftMenuTypes.ENERGY_MINECART.get(), EnergyMinecartScreen::new);
MenuScreens.register(RailcraftMenuTypes.SWITCH_TRACK_ROUTER.get(),
SwitchTrackRouterScreen::new);
MenuScreens.register(RailcraftMenuTypes.TUNNEL_BORE.get(), TunnelBoreScreen::new);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package mods.railcraft.client.gui.screen.inventory;

import mods.railcraft.api.core.RailcraftConstants;
import mods.railcraft.client.gui.screen.IngameWindowScreen;
import mods.railcraft.client.gui.screen.inventory.widget.GaugeRenderer;
import mods.railcraft.world.inventory.EnergyMinecartMenu;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Inventory;

public class EnergyMinecartScreen extends RailcraftMenuScreen<EnergyMinecartMenu> {

private static final ResourceLocation WIDGETS_TEXTURE_LOCATION =
RailcraftConstants.rl("textures/gui/container/energy_minecart.png");

public EnergyMinecartScreen(EnergyMinecartMenu menu, Inventory inventory,
Component title) {
super(menu, inventory, title);
this.registerWidgetRenderer(new GaugeRenderer(menu.getEnergyGauge()));
}

@Override
protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
guiGraphics.drawString(this.font, this.title, this.titleLabelX, this.titleLabelY,
IngameWindowScreen.TEXT_COLOR, false);
}

@Override
public ResourceLocation getWidgetsTexture() {
return WIDGETS_TEXTURE_LOCATION;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@
public class FluidLoaderRenderer extends FluidManipulatorRenderer<FluidLoaderBlockEntity> {

private static final float PIPE_OFFSET = 5 * RenderUtil.PIXEL;
public static final ResourceLocation PIPE_SIDE_TEXTURE_LOCATION =
private static final ResourceLocation PIPE_SIDE_TEXTURE_LOCATION =
RailcraftConstants.rl("entity/fluid_loader/pipe_side");
public static final ResourceLocation PIPE_END_TEXTURE_LOCATION =
private static final ResourceLocation PIPE_END_TEXTURE_LOCATION =
RailcraftConstants.rl("entity/fluid_loader/pipe_end");
public static final CuboidModel pipeModel = new CuboidModel(PIPE_OFFSET, 0, PIPE_OFFSET,
private static final CuboidModel PIPE_MODEL = new CuboidModel(PIPE_OFFSET, 0, PIPE_OFFSET,
1 - PIPE_OFFSET, RenderUtil.PIXEL, 1 - PIPE_OFFSET);

@Override
Expand All @@ -32,29 +32,29 @@ public void render(FluidLoaderBlockEntity blockEntity, float partialTick,
packedOverlay);
Minecraft minecraft = Minecraft.getInstance();

CuboidModel.Face sideFace = pipeModel.new Face()
CuboidModel.Face sideFace = PIPE_MODEL.new Face()
.setSprite(minecraft.getTextureAtlas(InventoryMenu.BLOCK_ATLAS)
.apply(PIPE_SIDE_TEXTURE_LOCATION));
pipeModel.set(Direction.NORTH, sideFace);
pipeModel.set(Direction.SOUTH, sideFace);
pipeModel.set(Direction.EAST, sideFace);
pipeModel.set(Direction.WEST, sideFace);
PIPE_MODEL.set(Direction.NORTH, sideFace);
PIPE_MODEL.set(Direction.SOUTH, sideFace);
PIPE_MODEL.set(Direction.EAST, sideFace);
PIPE_MODEL.set(Direction.WEST, sideFace);

CuboidModel.Face endFace = pipeModel.new Face()
CuboidModel.Face endFace = PIPE_MODEL.new Face()
.setSprite(minecraft.getTextureAtlas(InventoryMenu.BLOCK_ATLAS)
.apply(PIPE_END_TEXTURE_LOCATION));
pipeModel.set(Direction.UP, endFace);
pipeModel.set(Direction.DOWN, endFace);
PIPE_MODEL.set(Direction.UP, endFace);
PIPE_MODEL.set(Direction.DOWN, endFace);

pipeModel.setPackedLight(packedLight);
pipeModel.setPackedOverlay(packedOverlay);
PIPE_MODEL.setPackedLight(packedLight);
PIPE_MODEL.setPackedOverlay(packedOverlay);

poseStack.pushPose();
{
pipeModel.setMinY(RenderUtil.PIXEL - blockEntity.getPipeLength(partialTick));
PIPE_MODEL.setMinY(RenderUtil.PIXEL - blockEntity.getPipeLength(partialTick));
VertexConsumer vertexBuilder =
bufferSource.getBuffer(RenderType.entityCutout(InventoryMenu.BLOCK_ATLAS));
CuboidModelRenderer.render(pipeModel, poseStack, vertexBuilder, 0xFFFFFFFF,
CuboidModelRenderer.render(PIPE_MODEL, poseStack, vertexBuilder, 0xFFFFFFFF,
CuboidModelRenderer.FaceDisplay.BOTH, false);
}
poseStack.popPose();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package mods.railcraft.client.renderer.entity;

import mods.railcraft.client.renderer.entity.cart.ElectricLocomotiveRenderer;
import mods.railcraft.client.renderer.entity.cart.EnergyMinecartRenderer;
import mods.railcraft.client.renderer.entity.cart.SteamLocomotiveRenderer;
import mods.railcraft.client.renderer.entity.cart.TankMinecartRenderer;
import mods.railcraft.client.renderer.entity.cart.TrackLayerMinecartRenderer;
Expand All @@ -18,6 +19,8 @@ public class RailcraftEntityRenderers {
public static void register(EntityRenderersEvent.RegisterRenderers event) {
event.registerEntityRenderer(RailcraftEntityTypes.TANK_MINECART.get(),
TankMinecartRenderer::new);
event.registerEntityRenderer(RailcraftEntityTypes.ENERGY_MINECART.get(),
EnergyMinecartRenderer::new);
event.registerEntityRenderer(RailcraftEntityTypes.WORLD_SPIKE.get(),
WorldSpikeMinecartRenderer::new);
event.registerEntityRenderer(RailcraftEntityTypes.TRACK_LAYER.get(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package mods.railcraft.client.renderer.entity.cart;

import com.mojang.blaze3d.vertex.PoseStack;
import mods.railcraft.api.core.RailcraftConstants;
import mods.railcraft.client.model.LowSidesMinecartModel;
import mods.railcraft.client.model.RailcraftModelLayers;
import mods.railcraft.client.util.CuboidModel;
import mods.railcraft.client.util.CuboidModelRenderer;
import mods.railcraft.world.entity.vehicle.EnergyMinecart;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.EntityModel;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.inventory.InventoryMenu;

public class EnergyMinecartRenderer extends ContentsMinecartRenderer<EnergyMinecart> {

private static final ResourceLocation FRAME =
RailcraftConstants.rl("entity/minecart/energy_minecart_flux_frame");

private static final ResourceLocation CORE =
RailcraftConstants.rl("entity/minecart/energy_minecart_flux_core");

private static final float PIXEL_OFFSET = 0.5F / 16F;

private static final CuboidModel FRAME_MODEL =
new CuboidModel(PIXEL_OFFSET, PIXEL_OFFSET, PIXEL_OFFSET,
1 - PIXEL_OFFSET, 1 - PIXEL_OFFSET, 1 - PIXEL_OFFSET);

private static final CuboidModel CORE_MODEL =
new CuboidModel(1 / 16F, 1 / 16F, 1 / 16F, 15 / 16F, 15 / 16F, 15 / 16F);

private final LowSidesMinecartModel<EnergyMinecart> bodyModel;
private final LowSidesMinecartModel<EnergyMinecart> snowModel;

public EnergyMinecartRenderer(EntityRendererProvider.Context context) {
super(context);
this.bodyModel = new LowSidesMinecartModel<>(
context.bakeLayer(RailcraftModelLayers.LOW_SIDES_MINECART));
this.snowModel = new LowSidesMinecartModel<>(
context.bakeLayer(RailcraftModelLayers.LOW_SIDES_MINECART_SNOW));
}

@Override
protected void renderContents(EnergyMinecart cart, float partialTicks, PoseStack poseStack,
MultiBufferSource bufferSource, int packedLight, float red, float green, float blue,
float alpha) {
var minecraft = Minecraft.getInstance();

CuboidModel.Face frameFace = FRAME_MODEL.new Face()
.setSprite(minecraft.getTextureAtlas(InventoryMenu.BLOCK_ATLAS)
.apply(FRAME));

CuboidModel.Face coreFace = CORE_MODEL.new Face()
.setSprite(minecraft.getTextureAtlas(InventoryMenu.BLOCK_ATLAS)
.apply(CORE));

FRAME_MODEL.setAll(frameFace);
FRAME_MODEL.setPackedLight(packedLight);
FRAME_MODEL.setPackedOverlay(OverlayTexture.NO_OVERLAY);

CORE_MODEL.setAll(coreFace);
CORE_MODEL.setPackedLight(packedLight);
CORE_MODEL.setPackedOverlay(OverlayTexture.NO_OVERLAY);

poseStack.pushPose();
var vertexBuilder =
bufferSource.getBuffer(RenderType.entityCutout(InventoryMenu.BLOCK_ATLAS));
CuboidModelRenderer.render(FRAME_MODEL, poseStack, vertexBuilder, 0xFFFFFFFF,
CuboidModelRenderer.FaceDisplay.BOTH, false);
CuboidModelRenderer.render(CORE_MODEL, poseStack, vertexBuilder, 0xFFFFFFFF,
CuboidModelRenderer.FaceDisplay.BOTH, false);
poseStack.popPose();
}

@Override
protected EntityModel<? super EnergyMinecart> getBodyModel(EnergyMinecart cart) {
return this.bodyModel;
}

@Override
protected EntityModel<? super EnergyMinecart> getSnowModel(EnergyMinecart cart) {
return this.snowModel;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,15 @@ public TankMinecartRenderer(EntityRendererProvider.Context context) {

@Override
protected void renderContents(TankMinecart cart, float partialTicks,
PoseStack matrixStack, MultiBufferSource renderTypeBuffer, int packedLight, float red,
PoseStack poseStack, MultiBufferSource renderTypeBuffer, int packedLight, float red,
float green, float blue, float alpha) {
var vertexBuilder =
renderTypeBuffer.getBuffer(this.tankModel.renderType(TANK_TEXTURE_LOCATION));
this.tankModel.renderToBuffer(matrixStack, vertexBuilder, packedLight,
this.tankModel.renderToBuffer(poseStack, vertexBuilder, packedLight,
OverlayTexture.NO_OVERLAY, red, green, blue, alpha);
this.renderTank(cart, partialTicks, matrixStack, renderTypeBuffer, packedLight);
this.renderTank(cart, partialTicks, poseStack, renderTypeBuffer, packedLight);
if (cart.hasFilter()) {
this.renderFilterItem(cart, matrixStack, renderTypeBuffer, packedLight);
this.renderFilterItem(cart, poseStack, renderTypeBuffer, packedLight);
}
}

Expand Down

0 comments on commit 9720dbc

Please sign in to comment.