1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-08-28 16:22:18 +00:00

Fixed pocket and turtle upgrades. (Turtle tools render weird in inventories)

This commit is contained in:
Jacob Farley 2020-09-04 19:55:15 -05:00
parent 5333cda44e
commit abe2ec4686
9 changed files with 88 additions and 72 deletions

View File

@ -57,6 +57,9 @@ dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.0' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.1.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.1.0'
modRuntime "me.shedaniel:RoughlyEnoughItems-api:5.2.10"
modRuntime "me.shedaniel:RoughlyEnoughItems:5.2.10"
} }
sourceSets { sourceSets {

View File

@ -154,23 +154,4 @@ public final class ComputerCraft implements ModInitializer {
init(); init();
} }
public static final class TurtleUpgrades {
public static TurtleModem wirelessModemNormal;
public static TurtleModem wirelessModemAdvanced;
public static TurtleSpeaker speaker;
public static TurtleCraftingTable craftingTable;
public static TurtleSword diamondSword;
public static TurtleShovel diamondShovel;
public static TurtleTool diamondPickaxe;
public static TurtleAxe diamondAxe;
public static TurtleHoe diamondHoe;
}
public static final class PocketUpgrades {
public static PocketModem wirelessModemNormal;
public static PocketModem wirelessModemAdvanced;
public static PocketSpeaker speaker;
}
} }

View File

@ -66,12 +66,15 @@ public final class TransformedModel {
public void push(MatrixStack matrixStack) { public void push(MatrixStack matrixStack) {
matrixStack.push(); matrixStack.push();
matrixStack.translate(this.matrix.translation.getX(), this.matrix.translation.getY(), this.matrix.translation.getZ()); if (matrix.translation != null)
matrixStack.translate(this.matrix.translation.getX(), this.matrix.translation.getY(), this.matrix.translation.getZ());
matrixStack.multiply(this.matrix.getRotation2()); matrixStack.multiply(this.matrix.getRotation2());
matrixStack.scale(this.matrix.scale.getX(), this.matrix.scale.getY(), this.matrix.scale.getZ()); if (matrix.scale != null)
matrixStack.scale(this.matrix.scale.getX(), this.matrix.scale.getY(), this.matrix.scale.getZ());
matrixStack.multiply(this.matrix.rotation1); if (matrix.rotation1 != null)
matrixStack.multiply(this.matrix.rotation1);
} }
} }

View File

@ -159,22 +159,22 @@ public class TileEntityTurtleRenderer extends BlockEntityRenderer<TileTurtle> {
Identifier overlay = turtle.getOverlay(); Identifier overlay = turtle.getOverlay();
VertexConsumer buffer = renderer.getBuffer(TexturedRenderLayers.getEntityTranslucentCull()); VertexConsumer buffer = renderer.getBuffer(TexturedRenderLayers.getEntityTranslucentCull());
this.renderModel(transform, buffer, lightmapCoord, overlayLight, getTurtleModel(family, colour != -1), colour == -1 ? null : new int[] {colour}); renderModel(transform, buffer, lightmapCoord, overlayLight, getTurtleModel(family, colour != -1), colour == -1 ? null : new int[] {colour});
// Render the overlay // Render the overlay
ModelIdentifier overlayModel = getTurtleOverlayModel(overlay, HolidayUtil.getCurrentHoliday() == Holiday.CHRISTMAS); ModelIdentifier overlayModel = getTurtleOverlayModel(overlay, HolidayUtil.getCurrentHoliday() == Holiday.CHRISTMAS);
if (overlayModel != null) { if (overlayModel != null) {
this.renderModel(transform, buffer, lightmapCoord, overlayLight, overlayModel, null); renderModel(transform, buffer, lightmapCoord, overlayLight, overlayModel, null);
} }
// Render the upgrades // Render the upgrades
this.renderUpgrade(transform, buffer, lightmapCoord, overlayLight, turtle, TurtleSide.LEFT, partialTicks); renderUpgrade(transform, buffer, lightmapCoord, overlayLight, turtle, TurtleSide.LEFT, partialTicks);
this.renderUpgrade(transform, buffer, lightmapCoord, overlayLight, turtle, TurtleSide.RIGHT, partialTicks); renderUpgrade(transform, buffer, lightmapCoord, overlayLight, turtle, TurtleSide.RIGHT, partialTicks);
transform.pop(); transform.pop();
} }
private void renderUpgrade(@Nonnull MatrixStack transform, @Nonnull VertexConsumer renderer, int lightmapCoord, int overlayLight, TileTurtle turtle, public static void renderUpgrade(@Nonnull MatrixStack transform, @Nonnull VertexConsumer renderer, int lightmapCoord, int overlayLight, TileTurtle turtle,
TurtleSide side, float f) { TurtleSide side, float f) {
ITurtleUpgrade upgrade = turtle.getUpgrade(side); ITurtleUpgrade upgrade = turtle.getUpgrade(side);
if (upgrade == null) { if (upgrade == null) {
@ -189,27 +189,28 @@ public class TileEntityTurtleRenderer extends BlockEntityRenderer<TileTurtle> {
TransformedModel model = upgrade.getModel(turtle.getAccess(), side); TransformedModel model = upgrade.getModel(turtle.getAccess(), side);
model.push(transform); model.push(transform);
this.renderModel(transform, renderer, lightmapCoord, overlayLight, model.getModel(), null); TileEntityTurtleRenderer.renderModel(transform, renderer, lightmapCoord, overlayLight, model.getModel(), null);
transform.pop(); transform.pop();
transform.pop(); transform.pop();
} }
private void renderModel(@Nonnull MatrixStack transform, @Nonnull VertexConsumer renderer, int lightmapCoord, int overlayLight, public static void renderModel(@Nonnull MatrixStack transform, @Nonnull VertexConsumer renderer, int lightmapCoord, int overlayLight,
ModelIdentifier modelLocation, int[] tints) { ModelIdentifier modelLocation, int[] tints) {
BakedModelManager modelManager = MinecraftClient.getInstance() BakedModelManager modelManager = MinecraftClient.getInstance()
.getItemRenderer() .getItemRenderer()
.getModels() .getModels()
.getModelManager(); .getModelManager();
this.renderModel(transform, renderer, lightmapCoord, overlayLight, modelManager.getModel(modelLocation), tints); renderModel(transform, renderer, lightmapCoord, overlayLight, modelManager.getModel(modelLocation), tints);
} }
private void renderModel(@Nonnull MatrixStack transform, @Nonnull VertexConsumer renderer, int lightmapCoord, int overlayLight, BakedModel model, public static void renderModel(@Nonnull MatrixStack transform, @Nonnull VertexConsumer renderer, int lightmapCoord, int overlayLight, BakedModel model,
int[] tints) { int[] tints) {
this.random.setSeed(0); Random random = new Random();
renderQuads(transform, renderer, lightmapCoord, overlayLight, model.getQuads(null, null, this.random), tints); random.setSeed(0);
renderQuads(transform, renderer, lightmapCoord, overlayLight, model.getQuads(null, null, random), tints);
for (Direction facing : DirectionUtil.FACINGS) { for (Direction facing : DirectionUtil.FACINGS) {
renderQuads(transform, renderer, lightmapCoord, overlayLight, model.getQuads(null, facing, this.random), tints); renderQuads(transform, renderer, lightmapCoord, overlayLight, model.getQuads(null, facing, random), tints);
} }
} }
} }

View File

@ -14,6 +14,7 @@ import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
import dan200.computercraft.ComputerCraft; import dan200.computercraft.ComputerCraft;
import dan200.computercraft.api.ComputerCraftAPI;
import dan200.computercraft.shared.common.ContainerHeldItem; import dan200.computercraft.shared.common.ContainerHeldItem;
import dan200.computercraft.shared.computer.blocks.BlockComputer; import dan200.computercraft.shared.computer.blocks.BlockComputer;
import dan200.computercraft.shared.computer.blocks.TileCommandComputer; import dan200.computercraft.shared.computer.blocks.TileCommandComputer;
@ -44,11 +45,14 @@ import dan200.computercraft.shared.peripheral.speaker.BlockSpeaker;
import dan200.computercraft.shared.peripheral.speaker.TileSpeaker; import dan200.computercraft.shared.peripheral.speaker.TileSpeaker;
import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer; import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer;
import dan200.computercraft.shared.pocket.items.ItemPocketComputer; import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
import dan200.computercraft.shared.pocket.peripherals.PocketModem;
import dan200.computercraft.shared.pocket.peripherals.PocketSpeaker;
import dan200.computercraft.shared.turtle.blocks.BlockTurtle; import dan200.computercraft.shared.turtle.blocks.BlockTurtle;
import dan200.computercraft.shared.turtle.blocks.TileTurtle; import dan200.computercraft.shared.turtle.blocks.TileTurtle;
import dan200.computercraft.shared.turtle.core.TurtlePlayer; import dan200.computercraft.shared.turtle.core.TurtlePlayer;
import dan200.computercraft.shared.turtle.inventory.ContainerTurtle; import dan200.computercraft.shared.turtle.inventory.ContainerTurtle;
import dan200.computercraft.shared.turtle.items.ItemTurtle; import dan200.computercraft.shared.turtle.items.ItemTurtle;
import dan200.computercraft.shared.turtle.upgrades.*;
import dan200.computercraft.shared.util.FixedPointTileEntityType; import dan200.computercraft.shared.util.FixedPointTileEntityType;
import net.minecraft.block.Block; import net.minecraft.block.Block;
@ -61,6 +65,7 @@ import net.minecraft.entity.SpawnGroup;
import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItem;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroup;
import net.minecraft.item.Items;
import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandler;
import net.minecraft.screen.ScreenHandlerType; import net.minecraft.screen.ScreenHandlerType;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
@ -68,6 +73,7 @@ import net.minecraft.util.registry.Registry;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry; import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry;
import org.apache.http.client.utils.Idn;
public final class ComputerCraftRegistry { public final class ComputerCraftRegistry {
public static final String MOD_ID = ComputerCraft.MOD_ID; public static final String MOD_ID = ComputerCraft.MOD_ID;
@ -80,6 +86,9 @@ public final class ComputerCraftRegistry {
ModEntities.TURTLE_PLAYER, ModEntities.TURTLE_PLAYER,
ModContainers.COMPUTER, ModContainers.COMPUTER,
}; };
TurtleUpgrades.registerTurtleUpgrades();
PocketUpgrades.registerPocketUpgrades();
} }
public static final class ModBlocks { public static final class ModBlocks {
@ -247,5 +256,43 @@ public final class ComputerCraftRegistry {
} }
} }
public static final class TurtleUpgrades {
public static TurtleModem wirelessModemNormal = new TurtleModem(false, new Identifier(ComputerCraft.MOD_ID, "wireless_modem_normal"));
public static TurtleModem wirelessModemAdvanced = new TurtleModem(true, new Identifier(ComputerCraft.MOD_ID, "wireless_modem_advanced"));
public static TurtleSpeaker speaker = new TurtleSpeaker(new Identifier(ComputerCraft.MOD_ID, "speaker"));
public static TurtleCraftingTable craftingTable = new TurtleCraftingTable(new Identifier("minecraft", "crafting_table"));
public static TurtleSword diamondSword = new TurtleSword(new Identifier("minecraft", "diamond_sword"), Items.DIAMOND_SWORD);
public static TurtleShovel diamondShovel = new TurtleShovel(new Identifier("minecraft", "diamond_shovel"), Items.DIAMOND_SHOVEL);
public static TurtleTool diamondPickaxe = new TurtleTool(new Identifier("minecraft", "diamond_pickaxe"), Items.DIAMOND_PICKAXE);
public static TurtleAxe diamondAxe = new TurtleAxe(new Identifier("minecraft", "diamond_axe"), Items.DIAMOND_AXE);
public static TurtleHoe diamondHoe = new TurtleHoe(new Identifier("minecraft", "diamond_hoe"), Items.DIAMOND_HOE);
public static void registerTurtleUpgrades() {
ComputerCraftAPI.registerTurtleUpgrade(wirelessModemNormal);
ComputerCraftAPI.registerTurtleUpgrade(wirelessModemAdvanced);
ComputerCraftAPI.registerTurtleUpgrade(speaker);
ComputerCraftAPI.registerTurtleUpgrade(craftingTable);
ComputerCraftAPI.registerTurtleUpgrade(diamondSword);
ComputerCraftAPI.registerTurtleUpgrade(diamondShovel);
ComputerCraftAPI.registerTurtleUpgrade(diamondPickaxe);
ComputerCraftAPI.registerTurtleUpgrade(diamondAxe);
ComputerCraftAPI.registerTurtleUpgrade(diamondHoe);
}
}
public static final class PocketUpgrades {
public static PocketModem wirelessModemNormal = new PocketModem(false);
public static PocketModem wirelessModemAdvanced = new PocketModem(true);
public static PocketSpeaker speaker = new PocketSpeaker();
public static void registerPocketUpgrades() {
ComputerCraftAPI.registerPocketUpgrade(wirelessModemNormal);
ComputerCraftAPI.registerPocketUpgrade(wirelessModemAdvanced);
ComputerCraftAPI.registerPocketUpgrade(speaker);
}
}
} }

View File

@ -74,9 +74,9 @@ public final class PocketUpgrades {
public static Iterable<IPocketUpgrade> getVanillaUpgrades() { public static Iterable<IPocketUpgrade> getVanillaUpgrades() {
List<IPocketUpgrade> vanilla = new ArrayList<>(); List<IPocketUpgrade> vanilla = new ArrayList<>();
vanilla.add(ComputerCraft.PocketUpgrades.wirelessModemNormal); vanilla.add(ComputerCraftRegistry.PocketUpgrades.wirelessModemNormal);
vanilla.add(ComputerCraft.PocketUpgrades.wirelessModemAdvanced); vanilla.add(ComputerCraftRegistry.PocketUpgrades.wirelessModemAdvanced);
vanilla.add(ComputerCraft.PocketUpgrades.speaker); vanilla.add(ComputerCraftRegistry.PocketUpgrades.speaker);
return vanilla; return vanilla;
} }

View File

@ -108,18 +108,18 @@ public final class TurtleUpgrades {
if (vanilla == null) { if (vanilla == null) {
vanilla = new ITurtleUpgrade[] { vanilla = new ITurtleUpgrade[] {
// ComputerCraft upgrades // ComputerCraft upgrades
ComputerCraft.TurtleUpgrades.wirelessModemNormal, ComputerCraftRegistry.TurtleUpgrades.wirelessModemNormal,
ComputerCraft.TurtleUpgrades.wirelessModemAdvanced, ComputerCraftRegistry.TurtleUpgrades.wirelessModemAdvanced,
ComputerCraft.TurtleUpgrades.speaker, ComputerCraftRegistry.TurtleUpgrades.speaker,
// Vanilla Minecraft upgrades // Vanilla Minecraft upgrades
ComputerCraft.TurtleUpgrades.diamondPickaxe, ComputerCraftRegistry.TurtleUpgrades.diamondPickaxe,
ComputerCraft.TurtleUpgrades.diamondAxe, ComputerCraftRegistry.TurtleUpgrades.diamondAxe,
ComputerCraft.TurtleUpgrades.diamondSword, ComputerCraftRegistry.TurtleUpgrades.diamondSword,
ComputerCraft.TurtleUpgrades.diamondShovel, ComputerCraftRegistry.TurtleUpgrades.diamondShovel,
ComputerCraft.TurtleUpgrades.diamondHoe, ComputerCraftRegistry.TurtleUpgrades.diamondHoe,
ComputerCraft.TurtleUpgrades.craftingTable, ComputerCraftRegistry.TurtleUpgrades.craftingTable,
}; };
} }
return Arrays.stream(vanilla) return Arrays.stream(vanilla)

View File

@ -159,6 +159,9 @@ public abstract class BlockComputerBase<T extends TileComputerBase> extends Bloc
@Override @Override
public void onBreak(@Nonnull World world, @Nonnull BlockPos pos, @Nonnull BlockState state, @Nonnull PlayerEntity player) { public void onBreak(@Nonnull World world, @Nonnull BlockPos pos, @Nonnull BlockState state, @Nonnull PlayerEntity player) {
// Call super as it is what provides sound and block break particles. Does not do anything else.
super.onBreak(world, pos, state, player);
if (!(world instanceof ServerWorld)) { if (!(world instanceof ServerWorld)) {
return; return;
} }
@ -182,7 +185,5 @@ public abstract class BlockComputerBase<T extends TileComputerBase> extends Bloc
state.onStacksDropped(serverWorld, pos, player.getMainHandStack()); state.onStacksDropped(serverWorld, pos, player.getMainHandStack());
} }
// Call super as it is what provides sound and block break particles. Does not do anything else.
super.onBreak(world, pos, state, player);
} }
} }

View File

@ -29,6 +29,8 @@ import dan200.computercraft.shared.util.DropConsumer;
import dan200.computercraft.shared.util.FillableMatrix4f; import dan200.computercraft.shared.util.FillableMatrix4f;
import dan200.computercraft.shared.util.InventoryUtil; import dan200.computercraft.shared.util.InventoryUtil;
import dan200.computercraft.shared.util.WorldUtil; import dan200.computercraft.shared.util.WorldUtil;
import net.minecraft.client.util.math.Vector3f;
import net.minecraft.util.math.*;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import net.minecraft.block.Block; import net.minecraft.block.Block;
@ -46,10 +48,6 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Matrix4f;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
@ -93,25 +91,7 @@ public class TurtleTool extends AbstractTurtleUpgrade {
@Environment (EnvType.CLIENT) @Environment (EnvType.CLIENT)
public TransformedModel getModel(ITurtleAccess turtle, @Nonnull TurtleSide side) { public TransformedModel getModel(ITurtleAccess turtle, @Nonnull TurtleSide side) {
float xOffset = side == TurtleSide.LEFT ? -0.40625f : 0.40625f; float xOffset = side == TurtleSide.LEFT ? -0.40625f : 0.40625f;
Matrix4f transform = new FillableMatrix4f(new float[] { return TransformedModel.of(this.getCraftingItem(), new AffineTransformation(new Vector3f(xOffset, 0, 1), Vector3f.POSITIVE_Y.getDegreesQuaternion(90), new Vector3f(1, 1, 1), Quaternion.IDENTITY));
0.0f,
0.0f,
-1.0f,
1.0f + xOffset,
1.0f,
0.0f,
0.0f,
0.0f,
0.0f,
-1.0f,
0.0f,
1.0f,
0.0f,
0.0f,
0.0f,
1.0f,
});
return TransformedModel.of(this.getCraftingItem(), new AffineTransformation(transform));
} }
private TurtleCommandResult attack(final ITurtleAccess turtle, Direction direction, TurtleSide side) { private TurtleCommandResult attack(final ITurtleAccess turtle, Direction direction, TurtleSide side) {