rename group-id and artifact-id, fix recording points render

This commit is contained in:
MeexReay 2025-06-14 05:02:06 +03:00
parent 8242b2c601
commit 45998bbe2e
43 changed files with 169 additions and 205 deletions

View File

@ -14,5 +14,5 @@ fabric_version=0.102.0+1.21
# Mod Properties
mod_version = 1.1.2+1.21
maven_group = themixray.repeating.mod
maven_group = ru.themixray
archives_base_name = repeating-mod

View File

@ -1,4 +1,4 @@
package themixray.repeating.mod;
package ru.themixray.repeating_mod;
import java.io.IOException;
import java.nio.file.Files;

View File

@ -1,4 +1,4 @@
package themixray.repeating.mod;
package ru.themixray.repeating_mod;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
@ -15,13 +15,13 @@ import net.minecraft.util.math.Vec3d;
import org.lwjgl.glfw.GLFW;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import themixray.repeating.mod.event.events.DelayEvent;
import themixray.repeating.mod.event.RecordEvent;
import themixray.repeating.mod.event.events.InputEvent;
import themixray.repeating.mod.event.events.MoveEvent;
import themixray.repeating.mod.render.RenderHelper;
import themixray.repeating.mod.render.RenderSystem;
import themixray.repeating.mod.render.buffer.WorldBuffer;
import ru.themixray.repeating_mod.event.events.DelayEvent;
import ru.themixray.repeating_mod.event.RecordEvent;
import ru.themixray.repeating_mod.event.events.InputEvent;
import ru.themixray.repeating_mod.event.events.MoveEvent;
import ru.themixray.repeating_mod.render.RenderHelper;
import ru.themixray.repeating_mod.render.RenderSystem;
import ru.themixray.repeating_mod.render.buffer.WorldBuffer;
import java.awt.*;
import java.io.File;
@ -35,21 +35,21 @@ public class Main implements ClientModInitializer {
public static final FabricLoader loader = FabricLoader.getInstance();
public static Main me;
public RecordList record_list;
public RecordState now_record;
public ru.themixray.repeating_mod.RecordList record_list;
public ru.themixray.repeating_mod.RecordState now_record;
public boolean is_recording = false;
public long last_record = -1;
public TickTask move_tick = null;
public ru.themixray.repeating_mod.TickTask move_tick = null;
public TickTask replay_tick = null;
public ru.themixray.repeating_mod.TickTask replay_tick = null;
public boolean is_replaying = false;
public boolean loop_replay = false;
public static InputEvent input_replay = null;
public long living_ticks = 0;
public static RepeatingScreen menu;
public static ru.themixray.repeating_mod.RepeatingScreen menu;
private static KeyBinding menu_key;
private static KeyBinding toggle_replay_key;
private static KeyBinding toggle_record_key;
@ -58,7 +58,7 @@ public class Main implements ClientModInitializer {
public static Random rand = new Random();
public EasyConfig conf;
public ru.themixray.repeating_mod.EasyConfig conf;
public File records_folder;
@Override
@ -71,11 +71,11 @@ public class Main implements ClientModInitializer {
records_folder = new File(FabricLoader.getInstance().getGameDir().toFile(),"repeating_mod_records");
if (!records_folder.exists()) records_folder.mkdir();
record_list = new RecordList(records_folder);
record_list = new ru.themixray.repeating_mod.RecordList(records_folder);
record_list.loadRecords();
RenderSystem.init();
WorldRenderEvents.LAST.register(context -> {
WorldRenderEvents.AFTER_ENTITIES.register(context -> {
WorldBuffer buffer = RenderHelper.startTri(context);
if (now_record != null) {
Vec3d start_pos = now_record.getStartRecordPos();
@ -88,13 +88,13 @@ public class Main implements ClientModInitializer {
});
ClientTickEvents.END_CLIENT_TICK.register(client -> {
TickTask.tickTasks(TickTask.TickAt.CLIENT_EVENT);
ru.themixray.repeating_mod.TickTask.tickTasks(ru.themixray.repeating_mod.TickTask.TickAt.CLIENT_EVENT);
});
Map<String,String> def = new HashMap<>();
def.put("record_pos_delay", String.valueOf(record_pos_delay));
conf = new EasyConfig(loader.getConfigDir(),"repeating-mod",def);
conf = new ru.themixray.repeating_mod.EasyConfig(loader.getConfigDir(),"repeating-mod",def);
record_pos_delay = Long.parseLong(conf.data.get("record_pos_delay"));
@ -108,7 +108,7 @@ public class Main implements ClientModInitializer {
"key.repeating-mod.toggle_record",InputUtil.Type.KEYSYM,
-1,"text.repeating-mod.name"));
menu = new RepeatingScreen();
menu = new ru.themixray.repeating_mod.RepeatingScreen();
ClientTickEvents.END_CLIENT_TICK.register(client -> {
if (menu_key.wasPressed())
client.setScreen(menu);
@ -132,7 +132,7 @@ public class Main implements ClientModInitializer {
}
});
new TickTask(0,0) {
new ru.themixray.repeating_mod.TickTask(0,0) {
@Override
public void run() {
living_ticks++;
@ -142,7 +142,7 @@ public class Main implements ClientModInitializer {
System.setProperty("java.awt.headless", "false");
}
public void setNowRecord(RecordState record) {
public void setNowRecord(ru.themixray.repeating_mod.RecordState record) {
now_record = record;
}
@ -177,7 +177,7 @@ public class Main implements ClientModInitializer {
now_record.setStartRecordPos(start_pos);
if (record_pos_delay > 0) {
move_tick = new TickTask(
move_tick = new ru.themixray.repeating_mod.TickTask(
record_pos_delay,
record_pos_delay) {
@Override
@ -277,7 +277,7 @@ public class Main implements ClientModInitializer {
List<RecordEvent> events = now_record.getEvents();
replay_tick = new TickTask(0,0, TickTask.TickAt.CLIENT_EVENT) {
replay_tick = new ru.themixray.repeating_mod.TickTask(0,0, ru.themixray.repeating_mod.TickTask.TickAt.CLIENT_EVENT) {
public int replay_index = 0;
@Override

View File

@ -1,12 +1,9 @@
package themixray.repeating.mod;
package ru.themixray.repeating_mod;
import net.minecraft.text.Text;
import themixray.repeating.mod.widget.RecordListWidget;
import ru.themixray.repeating_mod.widget.RecordListWidget;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.text.SimpleDateFormat;
import java.util.*;
public class RecordList {

View File

@ -1,10 +1,9 @@
package themixray.repeating.mod;
package ru.themixray.repeating_mod;
import com.google.common.collect.Lists;
import net.minecraft.util.math.Vec3d;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.event.RecordEvent;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

View File

@ -1,4 +1,4 @@
package themixray.repeating.mod;
package ru.themixray.repeating_mod;
import net.minecraft.client.gui.DrawContext;

View File

@ -1,4 +1,4 @@
package themixray.repeating.mod;
package ru.themixray.repeating_mod;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@ -11,7 +11,7 @@ import net.minecraft.client.gui.tooltip.Tooltip;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.SliderWidget;
import net.minecraft.text.Text;
import themixray.repeating.mod.widget.RecordListWidget;
import ru.themixray.repeating_mod.widget.RecordListWidget;
import java.awt.*;
import java.io.File;
@ -20,7 +20,7 @@ import java.util.List;
@Environment(EnvType.CLIENT)
public class RepeatingScreen extends Screen {
private static List<RenderListener> render_listeners = new ArrayList<>();
private static List<ru.themixray.repeating_mod.RenderListener> render_listeners = new ArrayList<>();
public ButtonWidget record_btn;
public ButtonWidget loop_btn;
@ -34,18 +34,18 @@ public class RepeatingScreen extends Screen {
super(Text.empty());
}
public static void addRenderListener(RenderListener render) {
public static void addRenderListener(ru.themixray.repeating_mod.RenderListener render) {
render_listeners.add(render);
}
public static void removeRenderListener(RenderListener render) {
public static void removeRenderListener(ru.themixray.repeating_mod.RenderListener render) {
render_listeners.remove(render);
}
public void updateButtons() {
if (was_build) {
record_btn.setMessage(Text.translatable("text.repeating-mod." + ((Main.me.is_recording) ? "stop_record" : "start_record")));
loop_btn.setMessage(Text.translatable("text.repeating-mod." + ((Main.me.loop_replay) ? "off_loop" : "on_loop")));
record_btn.setMessage(Text.translatable("text.repeating-mod." + ((ru.themixray.repeating_mod.Main.me.is_recording) ? "stop_record" : "start_record")));
loop_btn.setMessage(Text.translatable("text.repeating-mod." + ((ru.themixray.repeating_mod.Main.me.loop_replay) ? "off_loop" : "on_loop")));
}
}
@ -53,7 +53,7 @@ public class RepeatingScreen extends Screen {
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
renderBackground(context, mouseX, mouseY, delta);
for (RenderListener l : render_listeners) {
for (ru.themixray.repeating_mod.RenderListener l : render_listeners) {
if (l.beforeRender()) {
l.render(context, mouseX, mouseY, delta);
}
@ -61,7 +61,7 @@ public class RepeatingScreen extends Screen {
super.render(context, mouseX, mouseY, delta);
for (RenderListener l : render_listeners) {
for (ru.themixray.repeating_mod.RenderListener l : render_listeners) {
if (!l.beforeRender()) {
l.render(context, mouseX, mouseY, delta);
}
@ -70,7 +70,7 @@ public class RepeatingScreen extends Screen {
@Override
protected void init() {
RecordListWidget list_widget = Main.me.record_list.getWidget();
RecordListWidget list_widget = ru.themixray.repeating_mod.Main.me.record_list.getWidget();
list_widget.setX(width / 2 + 2);
list_widget.setY(height / 2 - list_widget.getHeight() / 2);
@ -79,10 +79,10 @@ public class RepeatingScreen extends Screen {
record_btn = ButtonWidget.builder(
Text.translatable("text.repeating-mod.start_record"), button -> {
if (!Main.me.is_replaying) {
if (Main.me.is_recording)
Main.me.stopRecording();
else Main.me.startRecording();
if (!ru.themixray.repeating_mod.Main.me.is_replaying) {
if (ru.themixray.repeating_mod.Main.me.is_recording)
ru.themixray.repeating_mod.Main.me.stopRecording();
else ru.themixray.repeating_mod.Main.me.startRecording();
updateButtons();
}
})
@ -91,7 +91,7 @@ public class RepeatingScreen extends Screen {
.build();
loop_btn = ButtonWidget.builder(Text.empty(), button -> {
Main.me.loop_replay = !Main.me.loop_replay;
ru.themixray.repeating_mod.Main.me.loop_replay = !ru.themixray.repeating_mod.Main.me.loop_replay;
updateButtons();
})
.dimensions(width / 2 - 120, height / 2 - 10, 120, 20)
@ -100,9 +100,9 @@ public class RepeatingScreen extends Screen {
pos_delay_slider = new SliderWidget(
width / 2 - 120, height / 2 + 12, 120, 20,
(Main.me.record_pos_delay < 0) ? Text.translatable("text.repeating-mod.nan_pos_delay") :
Text.translatable("text.repeating-mod.pos_delay", String.valueOf(Main.me.record_pos_delay)),
(Main.me.record_pos_delay+1d)/101d) {
(ru.themixray.repeating_mod.Main.me.record_pos_delay < 0) ? Text.translatable("text.repeating-mod.nan_pos_delay") :
Text.translatable("text.repeating-mod.pos_delay", String.valueOf(ru.themixray.repeating_mod.Main.me.record_pos_delay)),
(ru.themixray.repeating_mod.Main.me.record_pos_delay+1d)/101d) {
@Override
protected void updateMessage() {
@ -116,9 +116,9 @@ public class RepeatingScreen extends Screen {
double v = value*101d-1d;
if (v <= 1) setMessage(Text.translatable("text.repeating-mod.nan_pos_delay"));
else setMessage(Text.translatable("text.repeating-mod.pos_delay", String.valueOf((long) v)));
Main.me.record_pos_delay = (long) v;
Main.me.conf.data.put("record_pos_delay",String.valueOf(Main.me.record_pos_delay));
Main.me.conf.save();
ru.themixray.repeating_mod.Main.me.record_pos_delay = (long) v;
ru.themixray.repeating_mod.Main.me.conf.data.put("record_pos_delay",String.valueOf(ru.themixray.repeating_mod.Main.me.record_pos_delay));
ru.themixray.repeating_mod.Main.me.conf.save();
}
@Override
@ -148,7 +148,7 @@ public class RepeatingScreen extends Screen {
if (files != null) {
for (File file : files) {
try {
Main.me.setNowRecord(Main.me.record_list.cloneRecord(file));
ru.themixray.repeating_mod.Main.me.setNowRecord(ru.themixray.repeating_mod.Main.me.record_list.cloneRecord(file));
} catch (Exception e) {
throw new RuntimeException(e);
}

View File

@ -1,4 +1,4 @@
package themixray.repeating.mod;
package ru.themixray.repeating_mod;
import java.util.ArrayList;
import java.util.List;

View File

@ -1,6 +1,6 @@
package themixray.repeating.mod.event;
package ru.themixray.repeating_mod.event;
import themixray.repeating.mod.event.events.*;
import ru.themixray.repeating_mod.event.events.*;
public abstract class RecordEvent {
public abstract void replay();

View File

@ -1,6 +1,6 @@
package themixray.repeating.mod.event;
package ru.themixray.repeating_mod.event;
import themixray.repeating.mod.event.events.*;
import ru.themixray.repeating_mod.event.events.*;
public enum RecordEventType {
BLOCK_BREAK('b',"block_break",BlockBreakEvent.class),

View File

@ -1,8 +1,8 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import net.minecraft.util.math.BlockPos;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.RecordEvent;
public class BlockBreakEvent extends RecordEvent {
public BlockPos pos;

View File

@ -1,12 +1,12 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec3d;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.RecordEvent;
public class BlockInteractEvent extends RecordEvent {
public Hand hand;

View File

@ -1,6 +1,6 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.event.RecordEvent;
public class DelayEvent extends RecordEvent {
public long delay;

View File

@ -1,7 +1,7 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiCharTypeEvent extends RecordEvent {
private char chr;

View File

@ -1,7 +1,7 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiCloseEvent extends RecordEvent {
public GuiCloseEvent() {}

View File

@ -1,7 +1,7 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiKeyPressEvent extends RecordEvent {
private int keyCode;

View File

@ -1,7 +1,7 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiKeyReleaseEvent extends RecordEvent {
private int keyCode;

View File

@ -1,7 +1,7 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiMouseClickEvent extends RecordEvent {
private double mouseX;

View File

@ -1,7 +1,7 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiMouseDragEvent extends RecordEvent {
private double mouseX;

View File

@ -1,7 +1,7 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiMouseMoveEvent extends RecordEvent {
private double mouseX;

View File

@ -1,7 +1,7 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiMouseReleaseEvent extends RecordEvent {
private double mouseX;

View File

@ -1,7 +1,7 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiMouseScrollEvent extends RecordEvent {
private double mouseX;

View File

@ -1,7 +1,7 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.RecordEvent;
public class InputEvent extends RecordEvent {
public Boolean sneaking;

View File

@ -1,9 +1,9 @@
package themixray.repeating.mod.event.events;
package ru.themixray.repeating_mod.event.events;
import net.minecraft.entity.MovementType;
import net.minecraft.util.math.Vec3d;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.RecordEvent;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.RecordEvent;
public class MoveEvent extends RecordEvent {
public Vec3d vec;

View File

@ -1,12 +1,12 @@
package themixray.repeating.mod.mixin;
package ru.themixray.repeating_mod.mixin;
import net.minecraft.client.MinecraftClient;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.TickTask;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.TickTask;
@Mixin(MinecraftClient.class)
public abstract class ClientMixin {

View File

@ -1,4 +1,4 @@
package themixray.repeating.mod.mixin;
package ru.themixray.repeating_mod.mixin;
import net.minecraft.entity.Entity;
import org.spongepowered.asm.mixin.Mixin;
@ -6,7 +6,7 @@ import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import themixray.repeating.mod.Main;
import ru.themixray.repeating_mod.Main;
import java.util.UUID;

View File

@ -1,11 +1,11 @@
package themixray.repeating.mod.mixin;
package ru.themixray.repeating_mod.mixin;
import net.minecraft.client.input.KeyboardInput;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import themixray.repeating.mod.Main;
import ru.themixray.repeating_mod.Main;
@Mixin(KeyboardInput.class)
public abstract class InputMixin {

View File

@ -1,4 +1,4 @@
package themixray.repeating.mod.mixin;
package ru.themixray.repeating_mod.mixin;
import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents;
import net.fabricmc.fabric.api.event.player.UseBlockCallback;
@ -9,10 +9,10 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.event.events.BlockBreakEvent;
import themixray.repeating.mod.event.events.BlockInteractEvent;
import themixray.repeating.mod.TickTask;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.events.BlockBreakEvent;
import ru.themixray.repeating_mod.event.events.BlockInteractEvent;
import ru.themixray.repeating_mod.TickTask;
@Mixin(ClientPlayerEntity.class)
public abstract class MovementMixin {

View File

@ -1,4 +1,4 @@
package themixray.repeating.mod.mixin;
package ru.themixray.repeating_mod.mixin;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.network.listener.ServerPlayPacketListener;

View File

@ -1,18 +1,12 @@
package themixray.repeating.mod.mixin;
package ru.themixray.repeating_mod.mixin;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientEntityEvents;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.entity.Entity;
import net.minecraft.network.ClientConnection;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import themixray.repeating.mod.Main;
import java.util.UUID;
import ru.themixray.repeating_mod.Main;
@Mixin(ClientConnection.class)
public abstract class PlayerMixin {

View File

@ -1,11 +1,11 @@
package themixray.repeating.mod.mixin;
package ru.themixray.repeating_mod.mixin;
import net.minecraft.client.render.*;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import themixray.repeating.mod.TickTask;
import ru.themixray.repeating_mod.TickTask;
@Mixin(GameRenderer.class)
public abstract class RendererMixin {

View File

@ -1,20 +1,15 @@
package themixray.repeating.mod.mixin;
package ru.themixray.repeating_mod.mixin;
import net.minecraft.client.gui.AbstractParentElement;
import net.minecraft.client.gui.Drawable;
import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.ParentElement;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.render.GameRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.TickTask;
import themixray.repeating.mod.event.events.*;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.event.events.*;
@Mixin(Screen.class)
public abstract class ScreenMixin extends AbstractParentElement implements Drawable {

View File

@ -1,10 +1,10 @@
package themixray.repeating.mod.render;
package ru.themixray.repeating_mod.render;
import lombok.experimental.UtilityClass;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.minecraft.util.math.Vec3d;
import themixray.repeating.mod.render.buffer.WorldBuffer;
import themixray.repeating.mod.render.shader.ShaderManager;
import org.joml.Vector3f;
import ru.themixray.repeating_mod.render.buffer.WorldBuffer;
import ru.themixray.repeating_mod.render.shader.ShaderManager;
import java.awt.*;
@ -27,8 +27,8 @@ public class RenderHelper {
}
public void drawLine(WorldBuffer buffer, float x1, float y1, float z1, float x2, float y2, float z2, Color color) {
buffer.vert(x1, y1, z1, color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
buffer.vert(x2, y2, z2, color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
buffer.vert(new Vector3f(x1, y1, z1), color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
buffer.vert(new Vector3f(x2, y2, z2), color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
}
public static WorldBuffer startTri(WorldRenderContext context) {
@ -49,9 +49,9 @@ public class RenderHelper {
}
public void drawTri(WorldBuffer buffer, float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, Color color) {
buffer.vert(x1, y1, z1, color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
buffer.vert(x2, y2, z2, color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
buffer.vert(x3, y3, z3, color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
buffer.vert(new Vector3f(x1, y1, z1), color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
buffer.vert(new Vector3f(x2, y2, z2), color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
buffer.vert(new Vector3f(x3, y3, z3), color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
}
public static void drawRectFromTri(WorldBuffer buffer,

View File

@ -1,8 +1,8 @@
package themixray.repeating.mod.render;
package ru.themixray.repeating_mod.render;
import lombok.experimental.UtilityClass;
import themixray.repeating.mod.render.buffer.BufferManager;
import themixray.repeating.mod.render.shader.ShaderManager;
import ru.themixray.repeating_mod.render.buffer.BufferManager;
import ru.themixray.repeating_mod.render.shader.ShaderManager;
@UtilityClass
public class RenderSystem {

View File

@ -1,4 +1,4 @@
package themixray.repeating.mod.render.buffer;
package ru.themixray.repeating_mod.render.buffer;
import lombok.experimental.UtilityClass;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;

View File

@ -1,14 +1,11 @@
package themixray.repeating.mod.render.buffer;
package ru.themixray.repeating_mod.render.buffer;
import lombok.Getter;
import org.joml.Vector3f;
public class Vertex {
@Getter
private float x;
@Getter
private float y;
@Getter
private float z;
private Vector3f pos;
@Getter
private float r;
@Getter
@ -18,10 +15,8 @@ public class Vertex {
@Getter
private float a;
public Vertex(float x, float y, float z, float r, float g, float b, float a) {
this.x = x;
this.y = y;
this.z = z;
public Vertex(Vector3f pos, float r, float g, float b, float a) {
this.pos = pos;
this.r = r;
this.g = g;
this.b = b;

View File

@ -1,11 +1,12 @@
package themixray.repeating.mod.render.buffer;
package ru.themixray.repeating_mod.render.buffer;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.minecraft.util.math.Vec3d;
import org.apache.commons.lang3.ArrayUtils;
import org.joml.Matrix4f;
import org.joml.Quaternionf;
import org.joml.Vector3f;
import org.lwjgl.BufferUtils;
import themixray.repeating.mod.render.shader.Shader;
import ru.themixray.repeating_mod.render.shader.Shader;
import java.nio.FloatBuffer;
import java.util.ArrayList;
@ -18,17 +19,19 @@ public class WorldBuffer {
private final int drawMode;
private final Shader shader;
private FloatBuffer projectionMatrix;
private final Vec3d cameraPos;
private final Vector3f cameraPos;
private final Quaternionf cameraRot;
public WorldBuffer(int drawMode, Shader shader, WorldRenderContext worldRenderContext) {
this.drawMode = drawMode;
this.shader = shader;
this.cameraPos = worldRenderContext.camera().getPos();
makeProjectionMatrix(worldRenderContext.projectionMatrix(), worldRenderContext.matrixStack().peek().getPositionMatrix());
this.cameraPos = worldRenderContext.camera().getPos().toVector3f();
this.cameraRot = worldRenderContext.camera().getRotation().invert();
this.projectionMatrix = worldRenderContext.projectionMatrix().mul(worldRenderContext.matrixStack().peek().getPositionMatrix()).get(BufferUtils.createFloatBuffer(16));
}
public void vert(float x, float y, float z, float r, float g, float b, float a) {
vertices.add(new Vertex(x - (float) cameraPos.x, y - (float) cameraPos.y, z - (float) cameraPos.z, r, g, b, a));
public void vert(Vector3f pos, float r, float g, float b, float a) {
vertices.add(new Vertex(cameraRot.transform(pos.sub(cameraPos)), r, g, b, a));
}
public void draw() {
@ -36,7 +39,7 @@ public class WorldBuffer {
BufferManager.bindBuffer();
BufferManager.writeBuffer(getBuffer());
applyProjectionMatrix();
shader.uniformMatrix4f("u_projection", projectionMatrix);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
glEnableVertexAttribArray(0);
@ -55,12 +58,12 @@ public class WorldBuffer {
private FloatBuffer getBuffer() {
FloatBuffer floatBuffer = BufferUtils.createFloatBuffer(vertices.size() * 7);
ArrayList<Float> floats = new ArrayList<>();
for (Vertex vertex : vertices) {
floats.add(vertex.getX());
floats.add(vertex.getY());
floats.add(vertex.getZ());
for (ru.themixray.repeating_mod.render.buffer.Vertex vertex : vertices) {
floats.add(vertex.getPos().x);
floats.add(vertex.getPos().y);
floats.add(vertex.getPos().z);
}
for (Vertex vertex : vertices) {
for (ru.themixray.repeating_mod.render.buffer.Vertex vertex : vertices) {
floats.add(vertex.getR());
floats.add(vertex.getG());
floats.add(vertex.getB());
@ -71,12 +74,4 @@ public class WorldBuffer {
floatBuffer.put(ArrayUtils.toPrimitive(floatArray));
return floatBuffer.flip();
}
private void makeProjectionMatrix(Matrix4f projectionMatrix, Matrix4f viewModelMatrix) {
this.projectionMatrix = projectionMatrix.mul(viewModelMatrix).get(BufferUtils.createFloatBuffer(16));
}
private void applyProjectionMatrix() {
shader.uniformMatrix4f("u_projection", projectionMatrix);
}
}

View File

@ -1,4 +1,4 @@
package themixray.repeating.mod.render.shader;
package ru.themixray.repeating_mod.render.shader;
import lombok.Getter;
@ -12,8 +12,8 @@ public class Shader {
public Shader(String name) {
int v = ShaderManager.loadShaderProgram(name, ShaderManager.ShaderType.VERTEX);
int f = ShaderManager.loadShaderProgram(name, ShaderManager.ShaderType.FRAGMENT);
int v = ru.themixray.repeating_mod.render.shader.ShaderManager.loadShaderProgram(name, ru.themixray.repeating_mod.render.shader.ShaderManager.ShaderType.VERTEX);
int f = ru.themixray.repeating_mod.render.shader.ShaderManager.loadShaderProgram(name, ru.themixray.repeating_mod.render.shader.ShaderManager.ShaderType.FRAGMENT);
this.id = glCreateProgram();
glAttachShader(id, v);
glAttachShader(id, f);

View File

@ -1,4 +1,4 @@
package themixray.repeating.mod.render.shader;
package ru.themixray.repeating_mod.render.shader;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.platform.TextureUtil;
@ -27,14 +27,14 @@ import static org.lwjgl.opengl.GL33.*;
@UtilityClass
public class ShaderManager {
@Getter
private Shader positionColorShader;
private ru.themixray.repeating_mod.render.shader.Shader positionColorShader;
public void init() {
ClientLifecycleEvents.CLIENT_STARTED.register(client -> loadShaders());
}
private void loadShaders() {
positionColorShader = new Shader("position_color");
positionColorShader = new ru.themixray.repeating_mod.render.shader.Shader("position_color");
}
public int loadShaderProgram(String name, ShaderType type) {

View File

@ -1,22 +1,14 @@
package themixray.repeating.mod.widget;
package ru.themixray.repeating_mod.widget;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.Drawable;
import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.Selectable;
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
import net.minecraft.client.gui.tooltip.Tooltip;
import net.minecraft.client.gui.widget.*;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.RecordState;
import themixray.repeating.mod.RepeatingScreen;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.RecordState;
import ru.themixray.repeating_mod.RepeatingScreen;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.function.Consumer;
public class RecordListWidget extends ScrollableWidget {
private LinkedList<RecordWidget> widgets = new LinkedList<>();

View File

@ -1,17 +1,14 @@
package themixray.repeating.mod.widget;
package ru.themixray.repeating_mod.widget;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.Drawable;
import net.minecraft.client.gui.tooltip.Tooltip;
import net.minecraft.client.gui.widget.*;
import net.minecraft.text.Style;
import net.minecraft.text.Text;
import net.minecraft.text.TextColor;
import net.minecraft.util.Formatting;
import themixray.repeating.mod.Main;
import themixray.repeating.mod.RecordState;
import themixray.repeating.mod.RenderListener;
import themixray.repeating.mod.RepeatingScreen;
import ru.themixray.repeating_mod.Main;
import ru.themixray.repeating_mod.RecordState;
import ru.themixray.repeating_mod.RepeatingScreen;
import java.awt.*;
import java.io.IOException;

View File

@ -19,7 +19,7 @@
"environment": "client",
"entrypoints": {
"client": [
"themixray.repeating.mod.Main"
"ru.themixray.repeating_mod.Main"
]
},
"mixins": [

View File

@ -1,7 +1,7 @@
{
"required": true,
"minVersion": "0.8",
"package": "themixray.repeating.mod.mixin",
"package": "ru.themixray.repeating_mod.mixin",
"compatibilityLevel": "JAVA_17",
"mixins": [
],