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

View File

@ -1,12 +1,9 @@
package themixray.repeating.mod; package ru.themixray.repeating_mod;
import net.minecraft.text.Text; import ru.themixray.repeating_mod.widget.RecordListWidget;
import themixray.repeating.mod.widget.RecordListWidget;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
public class RecordList { 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 com.google.common.collect.Lists;
import net.minecraft.util.math.Vec3d; 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.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; 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; 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.EnvType;
import net.fabricmc.api.Environment; 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.ButtonWidget;
import net.minecraft.client.gui.widget.SliderWidget; import net.minecraft.client.gui.widget.SliderWidget;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import themixray.repeating.mod.widget.RecordListWidget; import ru.themixray.repeating_mod.widget.RecordListWidget;
import java.awt.*; import java.awt.*;
import java.io.File; import java.io.File;
@ -20,7 +20,7 @@ import java.util.List;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class RepeatingScreen extends Screen { 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 record_btn;
public ButtonWidget loop_btn; public ButtonWidget loop_btn;
@ -34,18 +34,18 @@ public class RepeatingScreen extends Screen {
super(Text.empty()); super(Text.empty());
} }
public static void addRenderListener(RenderListener render) { public static void addRenderListener(ru.themixray.repeating_mod.RenderListener render) {
render_listeners.add(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); render_listeners.remove(render);
} }
public void updateButtons() { public void updateButtons() {
if (was_build) { if (was_build) {
record_btn.setMessage(Text.translatable("text.repeating-mod." + ((Main.me.is_recording) ? "stop_record" : "start_record"))); 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." + ((Main.me.loop_replay) ? "off_loop" : "on_loop"))); 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) { public void render(DrawContext context, int mouseX, int mouseY, float delta) {
renderBackground(context, mouseX, mouseY, delta); renderBackground(context, mouseX, mouseY, delta);
for (RenderListener l : render_listeners) { for (ru.themixray.repeating_mod.RenderListener l : render_listeners) {
if (l.beforeRender()) { if (l.beforeRender()) {
l.render(context, mouseX, mouseY, delta); l.render(context, mouseX, mouseY, delta);
} }
@ -61,7 +61,7 @@ public class RepeatingScreen extends Screen {
super.render(context, mouseX, mouseY, delta); super.render(context, mouseX, mouseY, delta);
for (RenderListener l : render_listeners) { for (ru.themixray.repeating_mod.RenderListener l : render_listeners) {
if (!l.beforeRender()) { if (!l.beforeRender()) {
l.render(context, mouseX, mouseY, delta); l.render(context, mouseX, mouseY, delta);
} }
@ -70,7 +70,7 @@ public class RepeatingScreen extends Screen {
@Override @Override
protected void init() { 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.setX(width / 2 + 2);
list_widget.setY(height / 2 - list_widget.getHeight() / 2); list_widget.setY(height / 2 - list_widget.getHeight() / 2);
@ -79,10 +79,10 @@ public class RepeatingScreen extends Screen {
record_btn = ButtonWidget.builder( record_btn = ButtonWidget.builder(
Text.translatable("text.repeating-mod.start_record"), button -> { Text.translatable("text.repeating-mod.start_record"), button -> {
if (!Main.me.is_replaying) { if (!ru.themixray.repeating_mod.Main.me.is_replaying) {
if (Main.me.is_recording) if (ru.themixray.repeating_mod.Main.me.is_recording)
Main.me.stopRecording(); ru.themixray.repeating_mod.Main.me.stopRecording();
else Main.me.startRecording(); else ru.themixray.repeating_mod.Main.me.startRecording();
updateButtons(); updateButtons();
} }
}) })
@ -91,7 +91,7 @@ public class RepeatingScreen extends Screen {
.build(); .build();
loop_btn = ButtonWidget.builder(Text.empty(), button -> { 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(); updateButtons();
}) })
.dimensions(width / 2 - 120, height / 2 - 10, 120, 20) .dimensions(width / 2 - 120, height / 2 - 10, 120, 20)
@ -100,9 +100,9 @@ public class RepeatingScreen extends Screen {
pos_delay_slider = new SliderWidget( pos_delay_slider = new SliderWidget(
width / 2 - 120, height / 2 + 12, 120, 20, width / 2 - 120, height / 2 + 12, 120, 20,
(Main.me.record_pos_delay < 0) ? Text.translatable("text.repeating-mod.nan_pos_delay") : (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(Main.me.record_pos_delay)), Text.translatable("text.repeating-mod.pos_delay", String.valueOf(ru.themixray.repeating_mod.Main.me.record_pos_delay)),
(Main.me.record_pos_delay+1d)/101d) { (ru.themixray.repeating_mod.Main.me.record_pos_delay+1d)/101d) {
@Override @Override
protected void updateMessage() { protected void updateMessage() {
@ -116,9 +116,9 @@ public class RepeatingScreen extends Screen {
double v = value*101d-1d; double v = value*101d-1d;
if (v <= 1) setMessage(Text.translatable("text.repeating-mod.nan_pos_delay")); 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))); else setMessage(Text.translatable("text.repeating-mod.pos_delay", String.valueOf((long) v)));
Main.me.record_pos_delay = (long) v; ru.themixray.repeating_mod.Main.me.record_pos_delay = (long) v;
Main.me.conf.data.put("record_pos_delay",String.valueOf(Main.me.record_pos_delay)); ru.themixray.repeating_mod.Main.me.conf.data.put("record_pos_delay",String.valueOf(ru.themixray.repeating_mod.Main.me.record_pos_delay));
Main.me.conf.save(); ru.themixray.repeating_mod.Main.me.conf.save();
} }
@Override @Override
@ -148,7 +148,7 @@ public class RepeatingScreen extends Screen {
if (files != null) { if (files != null) {
for (File file : files) { for (File file : files) {
try { 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) { } catch (Exception e) {
throw new RuntimeException(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.ArrayList;
import java.util.List; 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 class RecordEvent {
public abstract void replay(); 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 { public enum RecordEventType {
BLOCK_BREAK('b',"block_break",BlockBreakEvent.class), 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 net.minecraft.util.math.BlockPos;
import themixray.repeating.mod.Main; import ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.RecordEvent; import ru.themixray.repeating_mod.event.RecordEvent;
public class BlockBreakEvent extends RecordEvent { public class BlockBreakEvent extends RecordEvent {
public BlockPos pos; 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.Hand;
import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction; import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import themixray.repeating.mod.Main; import ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.RecordEvent; import ru.themixray.repeating_mod.event.RecordEvent;
public class BlockInteractEvent extends RecordEvent { public class BlockInteractEvent extends RecordEvent {
public Hand hand; 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 class DelayEvent extends RecordEvent {
public long delay; 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 ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.RecordEvent; import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiCharTypeEvent extends RecordEvent { public class GuiCharTypeEvent extends RecordEvent {
private char chr; 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 ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.RecordEvent; import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiCloseEvent extends RecordEvent { public class GuiCloseEvent extends RecordEvent {
public GuiCloseEvent() {} 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 ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.RecordEvent; import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiKeyPressEvent extends RecordEvent { public class GuiKeyPressEvent extends RecordEvent {
private int keyCode; 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 ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.RecordEvent; import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiKeyReleaseEvent extends RecordEvent { public class GuiKeyReleaseEvent extends RecordEvent {
private int keyCode; 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 ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.RecordEvent; import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiMouseClickEvent extends RecordEvent { public class GuiMouseClickEvent extends RecordEvent {
private double mouseX; 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 ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.RecordEvent; import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiMouseDragEvent extends RecordEvent { public class GuiMouseDragEvent extends RecordEvent {
private double mouseX; 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 ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.RecordEvent; import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiMouseMoveEvent extends RecordEvent { public class GuiMouseMoveEvent extends RecordEvent {
private double mouseX; 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 ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.RecordEvent; import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiMouseReleaseEvent extends RecordEvent { public class GuiMouseReleaseEvent extends RecordEvent {
private double mouseX; 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 ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.RecordEvent; import ru.themixray.repeating_mod.event.RecordEvent;
public class GuiMouseScrollEvent extends RecordEvent { public class GuiMouseScrollEvent extends RecordEvent {
private double mouseX; 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 ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.RecordEvent; import ru.themixray.repeating_mod.event.RecordEvent;
public class InputEvent extends RecordEvent { public class InputEvent extends RecordEvent {
public Boolean sneaking; 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.entity.MovementType;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import themixray.repeating.mod.Main; import ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.RecordEvent; import ru.themixray.repeating_mod.event.RecordEvent;
public class MoveEvent extends RecordEvent { public class MoveEvent extends RecordEvent {
public Vec3d vec; 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 net.minecraft.client.MinecraftClient;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import themixray.repeating.mod.Main; import ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.TickTask; import ru.themixray.repeating_mod.TickTask;
@Mixin(MinecraftClient.class) @Mixin(MinecraftClient.class)
public abstract class ClientMixin { 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 net.minecraft.entity.Entity;
import org.spongepowered.asm.mixin.Mixin; 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.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import themixray.repeating.mod.Main; import ru.themixray.repeating_mod.Main;
import java.util.UUID; 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 net.minecraft.client.input.KeyboardInput;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import themixray.repeating.mod.Main; import ru.themixray.repeating_mod.Main;
@Mixin(KeyboardInput.class) @Mixin(KeyboardInput.class)
public abstract class InputMixin { 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.PlayerBlockBreakEvents;
import net.fabricmc.fabric.api.event.player.UseBlockCallback; 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.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import themixray.repeating.mod.Main; import ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.event.events.BlockBreakEvent; import ru.themixray.repeating_mod.event.events.BlockBreakEvent;
import themixray.repeating.mod.event.events.BlockInteractEvent; import ru.themixray.repeating_mod.event.events.BlockInteractEvent;
import themixray.repeating.mod.TickTask; import ru.themixray.repeating_mod.TickTask;
@Mixin(ClientPlayerEntity.class) @Mixin(ClientPlayerEntity.class)
public abstract class MovementMixin { 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.client.network.ClientPlayNetworkHandler;
import net.minecraft.network.listener.ServerPlayPacketListener; 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.network.ClientConnection;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin; 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.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import themixray.repeating.mod.Main; import ru.themixray.repeating_mod.Main;
import java.util.UUID;
@Mixin(ClientConnection.class) @Mixin(ClientConnection.class)
public abstract class PlayerMixin { 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 net.minecraft.client.render.*;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import themixray.repeating.mod.TickTask; import ru.themixray.repeating_mod.TickTask;
@Mixin(GameRenderer.class) @Mixin(GameRenderer.class)
public abstract class RendererMixin { 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.AbstractParentElement;
import net.minecraft.client.gui.Drawable; 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.gui.screen.Screen;
import net.minecraft.client.render.GameRenderer;
import org.spongepowered.asm.mixin.Mixin; 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.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import themixray.repeating.mod.Main; import ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.TickTask; import ru.themixray.repeating_mod.event.events.*;
import themixray.repeating.mod.event.events.*;
@Mixin(Screen.class) @Mixin(Screen.class)
public abstract class ScreenMixin extends AbstractParentElement implements Drawable { 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 lombok.experimental.UtilityClass;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.minecraft.util.math.Vec3d; import org.joml.Vector3f;
import themixray.repeating.mod.render.buffer.WorldBuffer; import ru.themixray.repeating_mod.render.buffer.WorldBuffer;
import themixray.repeating.mod.render.shader.ShaderManager; import ru.themixray.repeating_mod.render.shader.ShaderManager;
import java.awt.*; 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) { 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(new Vector3f(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(x2, y2, z2), color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
} }
public static WorldBuffer startTri(WorldRenderContext context) { 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) { 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(new Vector3f(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(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(x3, y3, z3), color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
} }
public static void drawRectFromTri(WorldBuffer buffer, 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 lombok.experimental.UtilityClass;
import themixray.repeating.mod.render.buffer.BufferManager; import ru.themixray.repeating_mod.render.buffer.BufferManager;
import themixray.repeating.mod.render.shader.ShaderManager; import ru.themixray.repeating_mod.render.shader.ShaderManager;
@UtilityClass @UtilityClass
public class RenderSystem { 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 lombok.experimental.UtilityClass;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; 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 lombok.Getter;
import org.joml.Vector3f;
public class Vertex { public class Vertex {
@Getter @Getter
private float x; private Vector3f pos;
@Getter
private float y;
@Getter
private float z;
@Getter @Getter
private float r; private float r;
@Getter @Getter
@ -18,10 +15,8 @@ public class Vertex {
@Getter @Getter
private float a; private float a;
public Vertex(float x, float y, float z, float r, float g, float b, float a) { public Vertex(Vector3f pos, float r, float g, float b, float a) {
this.x = x; this.pos = pos;
this.y = y;
this.z = z;
this.r = r; this.r = r;
this.g = g; this.g = g;
this.b = b; 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.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.minecraft.util.math.Vec3d;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.joml.Matrix4f; import org.joml.Matrix4f;
import org.joml.Quaternionf;
import org.joml.Vector3f;
import org.lwjgl.BufferUtils; 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.nio.FloatBuffer;
import java.util.ArrayList; import java.util.ArrayList;
@ -18,17 +19,19 @@ public class WorldBuffer {
private final int drawMode; private final int drawMode;
private final Shader shader; private final Shader shader;
private FloatBuffer projectionMatrix; private FloatBuffer projectionMatrix;
private final Vec3d cameraPos; private final Vector3f cameraPos;
private final Quaternionf cameraRot;
public WorldBuffer(int drawMode, Shader shader, WorldRenderContext worldRenderContext) { public WorldBuffer(int drawMode, Shader shader, WorldRenderContext worldRenderContext) {
this.drawMode = drawMode; this.drawMode = drawMode;
this.shader = shader; this.shader = shader;
this.cameraPos = worldRenderContext.camera().getPos(); this.cameraPos = worldRenderContext.camera().getPos().toVector3f();
makeProjectionMatrix(worldRenderContext.projectionMatrix(), worldRenderContext.matrixStack().peek().getPositionMatrix()); 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) { public void vert(Vector3f pos, 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)); vertices.add(new Vertex(cameraRot.transform(pos.sub(cameraPos)), r, g, b, a));
} }
public void draw() { public void draw() {
@ -36,7 +39,7 @@ public class WorldBuffer {
BufferManager.bindBuffer(); BufferManager.bindBuffer();
BufferManager.writeBuffer(getBuffer()); BufferManager.writeBuffer(getBuffer());
applyProjectionMatrix(); shader.uniformMatrix4f("u_projection", projectionMatrix);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0); glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
glEnableVertexAttribArray(0); glEnableVertexAttribArray(0);
@ -55,12 +58,12 @@ public class WorldBuffer {
private FloatBuffer getBuffer() { private FloatBuffer getBuffer() {
FloatBuffer floatBuffer = BufferUtils.createFloatBuffer(vertices.size() * 7); FloatBuffer floatBuffer = BufferUtils.createFloatBuffer(vertices.size() * 7);
ArrayList<Float> floats = new ArrayList<>(); ArrayList<Float> floats = new ArrayList<>();
for (Vertex vertex : vertices) { for (ru.themixray.repeating_mod.render.buffer.Vertex vertex : vertices) {
floats.add(vertex.getX()); floats.add(vertex.getPos().x);
floats.add(vertex.getY()); floats.add(vertex.getPos().y);
floats.add(vertex.getZ()); 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.getR());
floats.add(vertex.getG()); floats.add(vertex.getG());
floats.add(vertex.getB()); floats.add(vertex.getB());
@ -71,12 +74,4 @@ public class WorldBuffer {
floatBuffer.put(ArrayUtils.toPrimitive(floatArray)); floatBuffer.put(ArrayUtils.toPrimitive(floatArray));
return floatBuffer.flip(); 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; import lombok.Getter;
@ -12,8 +12,8 @@ public class Shader {
public Shader(String name) { public Shader(String name) {
int v = ShaderManager.loadShaderProgram(name, ShaderManager.ShaderType.VERTEX); int v = ru.themixray.repeating_mod.render.shader.ShaderManager.loadShaderProgram(name, ru.themixray.repeating_mod.render.shader.ShaderManager.ShaderType.VERTEX);
int f = ShaderManager.loadShaderProgram(name, ShaderManager.ShaderType.FRAGMENT); int f = ru.themixray.repeating_mod.render.shader.ShaderManager.loadShaderProgram(name, ru.themixray.repeating_mod.render.shader.ShaderManager.ShaderType.FRAGMENT);
this.id = glCreateProgram(); this.id = glCreateProgram();
glAttachShader(id, v); glAttachShader(id, v);
glAttachShader(id, f); 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.GlStateManager;
import com.mojang.blaze3d.platform.TextureUtil; import com.mojang.blaze3d.platform.TextureUtil;
@ -27,14 +27,14 @@ import static org.lwjgl.opengl.GL33.*;
@UtilityClass @UtilityClass
public class ShaderManager { public class ShaderManager {
@Getter @Getter
private Shader positionColorShader; private ru.themixray.repeating_mod.render.shader.Shader positionColorShader;
public void init() { public void init() {
ClientLifecycleEvents.CLIENT_STARTED.register(client -> loadShaders()); ClientLifecycleEvents.CLIENT_STARTED.register(client -> loadShaders());
} }
private void 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) { 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.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.screen.narration.NarrationMessageBuilder;
import net.minecraft.client.gui.tooltip.Tooltip;
import net.minecraft.client.gui.widget.*; import net.minecraft.client.gui.widget.*;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import themixray.repeating.mod.Main; import ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.RecordState; import ru.themixray.repeating_mod.RecordState;
import themixray.repeating.mod.RepeatingScreen; import ru.themixray.repeating_mod.RepeatingScreen;
import java.util.ArrayList;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List;
import java.util.function.Consumer;
public class RecordListWidget extends ScrollableWidget { public class RecordListWidget extends ScrollableWidget {
private LinkedList<RecordWidget> widgets = new LinkedList<>(); 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.DrawContext;
import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Drawable;
import net.minecraft.client.gui.tooltip.Tooltip; import net.minecraft.client.gui.tooltip.Tooltip;
import net.minecraft.client.gui.widget.*; import net.minecraft.client.gui.widget.*;
import net.minecraft.text.Style;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.text.TextColor;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
import themixray.repeating.mod.Main; import ru.themixray.repeating_mod.Main;
import themixray.repeating.mod.RecordState; import ru.themixray.repeating_mod.RecordState;
import themixray.repeating.mod.RenderListener; import ru.themixray.repeating_mod.RepeatingScreen;
import themixray.repeating.mod.RepeatingScreen;
import java.awt.*; import java.awt.*;
import java.io.IOException; import java.io.IOException;

View File

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

View File

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