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

Merge remote-tracking branch 'origin/fabric' into fabric

This commit is contained in:
Devan-Kerman 2020-08-29 18:47:57 -05:00
commit 30ab6bd045
18 changed files with 83 additions and 64 deletions

View File

@ -20,6 +20,7 @@ repositories {
}
minecraft {
accessWidener = file("src/main/resources/computercraft.accesswidener")
}
configurations {

View File

@ -15,6 +15,8 @@ import dan200.computercraft.shared.media.items.ItemDisk;
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
import dan200.computercraft.shared.util.Colour;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.render.model.ModelLoader;
@ -31,6 +33,7 @@ import net.fabricmc.fabric.api.event.client.ClientSpriteRegistryCallback;
/**
* Registers textures and models for items.
*/
@Environment(EnvType.CLIENT)
public final class ClientRegistry {
private static final String[] EXTRA_MODELS = new String[] {
"turtle_modem_normal_off_left",
@ -104,6 +107,7 @@ public final class ClientRegistry {
model.getTextureDependencies(loader::getOrLoadModel, new HashSet<>());
SpriteAtlasTexture sprite = MinecraftClient.getInstance()
.getSpriteAtlas();
return model.bake(loader, sprite::getSprite, ModelRotation.X0_Y0);
return model.bake(loader, spriteIdentifier -> MinecraftClient.getInstance()
.getSpriteAtlas(spriteIdentifier.getAtlasId()).apply(spriteIdentifier.getTextureId()), ModelRotation.X0_Y0);
}
}

View File

@ -14,6 +14,9 @@ import dan200.computercraft.shared.command.text.ChatHelpers;
import dan200.computercraft.shared.command.text.TableBuilder;
import dan200.computercraft.shared.command.text.TableFormatter;
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.text.OrderedText;
import org.apache.commons.lang3.StringUtils;
import net.minecraft.client.MinecraftClient;
@ -24,6 +27,7 @@ import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.util.math.MathHelper;
@Environment(EnvType.CLIENT)
public class ClientTableFormatter implements TableFormatter {
public static final ClientTableFormatter INSTANCE = new ClientTableFormatter();
@ -39,7 +43,7 @@ public class ClientTableFormatter implements TableFormatter {
TextRenderer renderer = renderer();
float spaceWidth = renderer.getCharWidth(' ');
float spaceWidth = renderer.getWidth(" ");
int spaces = MathHelper.floor(extraWidth / spaceWidth);
int extra = extraWidth - (int) (spaces * spaceWidth);
@ -57,7 +61,7 @@ public class ClientTableFormatter implements TableFormatter {
@Override
public int getWidth(Text component) {
return renderer().getWidth(component.asFormattedString());
return renderer().getWidth(component.asString());
}
@Override
@ -67,9 +71,9 @@ public class ClientTableFormatter implements TableFormatter {
// Trim the text if it goes over the allowed length
int maxWidth = MathHelper.floor(chat.getWidth() / chat.getChatScale());
List<Text> list = ChatMessages.breakRenderedChatMessageLines(component, maxWidth, mc.textRenderer, false, false);
List<OrderedText> list = ChatMessages.breakRenderedChatMessageLines(component, maxWidth, mc.textRenderer);
if (!list.isEmpty()) {
chat.addMessage(list.get(0), id);
chat.addMessage((Text) list.get(0), id);
}
}

View File

@ -16,6 +16,7 @@ import com.mojang.blaze3d.platform.GlStateManager;
import dan200.computercraft.core.terminal.TextBuffer;
import dan200.computercraft.shared.common.ContainerHeldItem;
import dan200.computercraft.shared.media.items.ItemPrintout;
import net.minecraft.client.util.math.MatrixStack;
import org.lwjgl.glfw.GLFW;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
@ -102,23 +103,23 @@ public class GuiPrintout extends HandledScreen<ContainerHeldItem> {
}
@Override
public void drawBackground(float partialTicks, int mouseX, int mouseY) {
public void drawBackground(MatrixStack stack, float partialTicks, int mouseX, int mouseY) {
// Draw the printout
GlStateManager.color4f(1.0f, 1.0f, 1.0f, 1.0f);
GlStateManager.enableDepthTest();
drawBorder(this.x, this.y, blitOffset, this.m_page, this.m_pages, this.m_book);
drawBorder(this.x, this.y, getZOffset(), this.m_page, this.m_pages, this.m_book);
drawText(this.x + X_TEXT_MARGIN, this.y + Y_TEXT_MARGIN, ItemPrintout.LINES_PER_PAGE * this.m_page, this.m_text, this.m_colours);
}
@Override
public void render(int mouseX, int mouseY, float partialTicks) {
public void render(MatrixStack stack, int mouseX, int mouseY, float partialTicks) {
// We must take the background further back in order to not overlap with our printed pages.
blitOffset--;
renderBackground();
blitOffset++;
setZOffset(getZOffset() - 1);
renderBackground(stack);
setZOffset(getZOffset() + 1);
super.render(mouseX, mouseY, partialTicks);
this.drawMouseoverTooltip(mouseX, mouseY);
super.render(stack, mouseX, mouseY, partialTicks);
this.drawMouseoverTooltip(stack, mouseX, mouseY);
}
}

View File

@ -14,6 +14,7 @@ import dan200.computercraft.shared.computer.core.ClientComputer;
import dan200.computercraft.shared.computer.core.ComputerFamily;
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
import dan200.computercraft.shared.turtle.inventory.ContainerTurtle;
import net.minecraft.client.util.math.MatrixStack;
import org.lwjgl.glfw.GLFW;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
@ -43,12 +44,12 @@ public class GuiTurtle extends HandledScreen<ContainerTurtle> {
@Override
protected void init() {
super.init();
minecraft.keyboard.enableRepeatEvents(true);
client.keyboard.setRepeatEvents(true);
int termPxWidth = ComputerCraft.terminalWidth_turtle * FixedWidthFontRenderer.FONT_WIDTH;
int termPxHeight = ComputerCraft.terminalHeight_turtle * FixedWidthFontRenderer.FONT_HEIGHT;
this.terminal = new WidgetTerminal(minecraft, () -> this.m_computer, ComputerCraft.terminalWidth_turtle, ComputerCraft.terminalHeight_turtle, 2, 2, 2, 2);
this.terminal = new WidgetTerminal(client, () -> this.m_computer, ComputerCraft.terminalWidth_turtle, ComputerCraft.terminalHeight_turtle, 2, 2, 2, 2);
this.terminalWrapper = new WidgetWrapper(this.terminal, 2 + 8 + this.x, 2 + 8 + this.y, termPxWidth, termPxHeight);
this.children.add(this.terminalWrapper);
@ -79,7 +80,7 @@ public class GuiTurtle extends HandledScreen<ContainerTurtle> {
super.removed();
this.children.remove(this.terminal);
this.terminal = null;
minecraft.keyboard.enableRepeatEvents(false);
client.keyboard.setRepeatEvents(false);
}
@Override
@ -89,37 +90,37 @@ public class GuiTurtle extends HandledScreen<ContainerTurtle> {
}
@Override
protected void drawBackground(float partialTicks, int mouseX, int mouseY) {
protected void drawBackground(MatrixStack stack, float partialTicks, int mouseX, int mouseY) {
// Draw term
boolean advanced = this.m_family == ComputerFamily.Advanced;
this.terminal.draw(this.terminalWrapper.getX(), this.terminalWrapper.getY());
// Draw border/inventory
GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
minecraft.getTextureManager()
client.getTextureManager()
.bindTextureInner(advanced ? BACKGROUND_ADVANCED : BACKGROUND_NORMAL);
blit(this.x, this.y, 0, 0, this.backgroundWidth, this.backgroundHeight);
drawTexture(stack, this.x, this.y, 0, 0, this.backgroundWidth, this.backgroundHeight);
this.drawSelectionSlot(advanced);
this.drawSelectionSlot(stack, advanced);
}
private void drawSelectionSlot(boolean advanced) {
private void drawSelectionSlot(MatrixStack stack, boolean advanced) {
// Draw selection slot
int slot = this.m_container.getSelectedSlot();
if (slot >= 0) {
GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
int slotX = slot % 4;
int slotY = slot / 4;
minecraft.getTextureManager()
client.getTextureManager()
.bindTextureInner(advanced ? BACKGROUND_ADVANCED : BACKGROUND_NORMAL);
blit(this.x + this.m_container.m_turtleInvStartX - 2 + slotX * 18, this.y + this.m_container.m_playerInvStartY - 2 + slotY * 18, 0, 217, 24, 24);
drawTexture(stack, this.x + this.m_container.m_turtleInvStartX - 2 + slotX * 18, this.y + this.m_container.m_playerInvStartY - 2 + slotY * 18, 0, 217, 24, 24);
}
}
@Override
public void render(int mouseX, int mouseY, float partialTicks) {
renderBackground();
super.render(mouseX, mouseY, partialTicks);
this.drawMouseoverTooltip(mouseX, mouseY);
public void render(MatrixStack stack, int mouseX, int mouseY, float partialTicks) {
renderBackground(stack);
super.render(stack, mouseX, mouseY, partialTicks);
this.drawMouseoverTooltip(stack, mouseX, mouseY);
}
}

View File

@ -20,6 +20,8 @@ import dan200.computercraft.shared.computer.core.ClientComputer;
import dan200.computercraft.shared.computer.core.IComputer;
import dan200.computercraft.shared.util.Colour;
import dan200.computercraft.shared.util.Palette;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import org.lwjgl.glfw.GLFW;
import org.lwjgl.opengl.GL11;
@ -30,6 +32,7 @@ import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormats;
@Environment(EnvType.CLIENT)
public class WidgetTerminal implements Element {
private static final float TERMINATE_TIME = 0.5f;
@ -410,16 +413,16 @@ public class WidgetTerminal implements Element {
BufferBuilder buffer = tesslector.getBuffer();
buffer.begin(GL11.GL_QUADS, VertexFormats.POSITION_TEXTURE);
buffer.vertex(x, y + height, 0)
.texture(0 / 256.0, height / 256.0)
.texture(0 / 256.0f, height / 256.0f)
.next();
buffer.vertex(x + width, y + height, 0)
.texture(width / 256.0, height / 256.0)
.texture(width / 256.0f, height / 256.f)
.next();
buffer.vertex(x + width, y, 0)
.texture(width / 256.0, 0 / 256.0)
.texture(width / 256.0f, 0 / 256.0f)
.next();
buffer.vertex(x, y, 0)
.texture(0 / 256.0, 0 / 256.0)
.texture(0 / 256.0f, 0 / 256.0f)
.next();
tesslector.draw();
} finally {

View File

@ -32,12 +32,12 @@ import dan200.computercraft.shared.peripheral.monitor.TileMonitor;
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
import dan200.computercraft.shared.turtle.inventory.ContainerTurtle;
import net.fabricmc.fabric.api.client.rendereregistry.v1.BlockEntityRendererRegistry;
import net.minecraft.client.texture.SpriteAtlasTexture;
import net.minecraft.inventory.SimpleInventory;
import net.minecraft.screen.ArrayPropertyDelegate;
import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry;
import net.fabricmc.fabric.api.client.render.BlockEntityRendererRegistry;
import net.fabricmc.fabric.api.event.client.ClientSpriteRegistryCallback;
import net.fabricmc.fabric.api.event.client.ClientTickCallback;

View File

@ -9,9 +9,9 @@ package dan200.computercraft.shared.command.arguments;
import com.mojang.brigadier.arguments.ArgumentType;
import dan200.computercraft.ComputerCraft;
import net.minecraft.command.arguments.ArgumentTypes;
import net.minecraft.command.arguments.serialize.ArgumentSerializer;
import net.minecraft.command.arguments.serialize.ConstantArgumentSerializer;
import net.minecraft.command.argument.ArgumentTypes;
import net.minecraft.command.argument.serialize.ArgumentSerializer;
import net.minecraft.command.argument.serialize.ConstantArgumentSerializer;
import net.minecraft.util.Identifier;
public final class ArgumentSerializers {

View File

@ -36,7 +36,7 @@ import dan200.computercraft.ComputerCraft;
import dan200.computercraft.shared.computer.core.ComputerFamily;
import dan200.computercraft.shared.computer.core.ServerComputer;
import net.minecraft.command.arguments.serialize.ArgumentSerializer;
import net.minecraft.command.argument.serialize.ArgumentSerializer;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.server.command.ServerCommandSource;

View File

@ -25,8 +25,8 @@ import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
import com.mojang.brigadier.suggestion.Suggestions;
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
import net.minecraft.command.arguments.ArgumentTypes;
import net.minecraft.command.arguments.serialize.ArgumentSerializer;
import net.minecraft.command.argument.ArgumentTypes;
import net.minecraft.command.argument.serialize.ArgumentSerializer;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text;

View File

@ -6,12 +6,7 @@
package dan200.computercraft.shared.command.text;
import net.minecraft.text.ClickEvent;
import net.minecraft.text.HoverEvent;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Style;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText;
import net.minecraft.text.*;
import net.minecraft.util.Formatting;
import net.minecraft.util.math.BlockPos;
@ -28,7 +23,7 @@ public final class ChatHelpers {
}
public static Text list(Text... children) {
Text component = new LiteralText("");
MutableText component = new LiteralText("");
for (Text child : children) {
component.append(child);
}
@ -68,7 +63,7 @@ public final class ChatHelpers {
style.withColor(Formatting.YELLOW);
}
style.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command));
style.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, toolTip));
style.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, toolTip));
return component;
}

View File

@ -183,7 +183,6 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT
* @param pos The position of the neighbour
* @param side The side we are reading from
* @return The effective redstone power
* @see net.minecraft.block.RedstoneBlock#method_9991(World, BlockPos, BlockState)
*/
protected static int getRedstoneInput(World world, BlockPos pos, Direction side) {
int power = world.getEmittedRedstonePower(pos, side);
@ -321,8 +320,8 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT
}
@Override
public void fromTag(CompoundTag nbt) {
super.fromTag(nbt);
public void fromTag(BlockState state, CompoundTag nbt) {
super.fromTag(state, nbt);
// Load ID, label and power state
this.m_computerID = nbt.contains(NBT_ID) ? nbt.getInt(NBT_ID) : -1;

View File

@ -39,7 +39,7 @@ public class MixinWorld {
private static void setWorld(BlockEntity entity, Object world) {
if (entity.getWorld() != world && entity instanceof TileGeneric) {
entity.setLocation((World) world);
entity.setLocation((World) world, entity.getPos());
}
}

View File

@ -209,7 +209,7 @@ public class TurtleBrain implements ITurtleAccess {
}
// Ensure the chunk is loaded
if (!world.isBlockLoaded(pos)) {
if (!world.isChunkLoaded(pos)) {
return false;
}
@ -239,7 +239,7 @@ public class TurtleBrain implements ITurtleAccess {
if (newTile instanceof TileTurtle) {
// Copy the old turtle state into the new turtle
TileTurtle newTurtle = (TileTurtle) newTile;
newTurtle.setLocation(world);
newTurtle.setLocation(world, pos);
newTurtle.setPos(pos);
newTurtle.transferStateFrom(oldOwner);
newTurtle.createServerComputer()
@ -631,7 +631,7 @@ public class TurtleBrain implements ITurtleAccess {
}
Box aabb = new Box(minX, minY, minZ, maxX, maxY, maxZ);
List<Entity> list = world.getEntities((Entity) null, aabb, EntityPredicates.EXCEPT_SPECTATOR);
List<Entity> list = world.getOtherEntities((Entity) null, aabb, EntityPredicates.EXCEPT_SPECTATOR);
if (!list.isEmpty()) {
double pushStep = 1.0f / ANIM_DURATION;
double pushStepX = moveDir.getOffsetX() * pushStep;

View File

@ -43,9 +43,8 @@ public final class TurtlePlayer extends FakePlayer {
private void setState(ITurtleAccess turtle) {
BlockPos position = turtle.getPosition();
x = position.getX() + 0.5;
y = position.getY() + 0.5;
z = position.getZ() + 0.5;
this.pos.add(0.5, 0.5, 0.5);
this.yaw = turtle.getDirection()
.asRotation();
@ -102,9 +101,9 @@ public final class TurtlePlayer extends FakePlayer {
@Override
public Vec3d getCameraPosVec(float float_1) {
y -= this.getStandingEyeHeight();
this.pos.subtract(0, this.getStandingEyeHeight(), 0);
Vec3d r = super.getCameraPosVec(float_1);
y += this.getStandingEyeHeight();
this.pos.add(0, this.getStandingEyeHeight(), 0);
return r;
}
}

View File

@ -8,7 +8,7 @@ import java.util.concurrent.TimeUnit;
import blue.endless.jankson.Comment;
import blue.endless.jankson.Jankson;
import blue.endless.jankson.JsonObject;
import blue.endless.jankson.impl.SyntaxError;
import blue.endless.jankson.api.SyntaxError;
import com.google.common.base.CaseFormat;
import com.google.common.base.Converter;
import dan200.computercraft.ComputerCraft;

View File

@ -11,6 +11,7 @@ import java.util.List;
import javax.annotation.Nonnull;
import com.google.common.base.Predicate;
import net.minecraft.world.RaycastContext;
import org.apache.commons.lang3.tuple.Pair;
import net.minecraft.block.BlockState;
@ -28,7 +29,6 @@ import net.minecraft.util.math.Box;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.world.RayTraceContext;
import net.minecraft.world.World;
public final class WorldUtil {
@ -69,10 +69,10 @@ public final class WorldUtil {
// Raycast for blocks
ENTITY.updatePosition(vecStart.x, vecStart.y, vecStart.z);
HitResult result = world.rayTrace(new RayTraceContext(vecStart,
HitResult result = world.raycast(new RaycastContext(vecStart,
vecEnd,
RayTraceContext.ShapeType.OUTLINE,
RayTraceContext.FluidHandling.NONE,
RaycastContext.ShapeType.OUTLINE,
RaycastContext.FluidHandling.NONE,
ENTITY));
if (result != null && result.getType() == HitResult.Type.BLOCK) {
distance = vecStart.distanceTo(result.getPos());
@ -92,7 +92,7 @@ public final class WorldUtil {
Entity closest = null;
double closestDist = 99.0;
List<Entity> list = world.getEntities(Entity.class, bigBox, CAN_COLLIDE);
List<Entity> list = world.getEntitiesByClass(Entity.class, bigBox, CAN_COLLIDE);
for (Entity entity : list) {
Box littleBox = entity.getBoundingBox();

View File

@ -0,0 +1,12 @@
accessWidener v1 named
accessible method net/minecraft/client/gui/hud/ChatHud addMessage (Lnet/minecraft/text/Text;I)V
accessible method net/minecraft/client/gui/hud/ChatHud removeMessage (I)V
accessible field net/minecraft/block/entity/BlockEntity invalid Z
accessible method net/minecraft/world/World isValid (Lnet/minecraft/util/math/BlockPos;)Z
accessible method net/minecraft/client/render/item/HeldItemRenderer renderArmHoldingItem (Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IFFLnet/minecraft/util/Arm;)V
accessible method net/minecraft/client/render/item/HeldItemRenderer renderArm (Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/util/Arm;)V
accessible method net/minecraft/client/render/item/HeldItemRenderer getMapAngle (F)F
accessible method net/minecraft/client/texture/TextureManager bindTextureInner (Lnet/minecraft/util/Identifier;)V
accessible field net/minecraft/entity/Entity pos Lnet/minecraft/util/math/Vec3d;
extendable method net/minecraft/entity/Entity getCameraPosVec (F)Lnet/minecraft/util/math/Vec3d;