Skip to content

Commit

Permalink
Version b0.0.2 commit
Browse files Browse the repository at this point in the history
  • Loading branch information
AviatorRob committed Aug 17, 2024
1 parent 9f6dadc commit b058538
Show file tree
Hide file tree
Showing 47 changed files with 1,229 additions and 373 deletions.
3 changes: 1 addition & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
plugins {
id "architectury-plugin" version "3.4-SNAPSHOT"
id "dev.architectury.loom" version "1.6.+" apply false
id "dev.architectury.loom" version "+" apply false
}

architectury {
Expand All @@ -25,7 +25,6 @@ subprojects {
// The following line declares the yarn mappings you may select this one as well.
// mappings "net.fabricmc:yarn:1.19.4+build.2:v2"


}
}

Expand Down
1 change: 1 addition & 0 deletions common/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ dependencies {
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
// Remove the next line if you don't want to depend on the API
modApi "dev.architectury:architectury:${rootProject.architectury_version}"
modCompileOnly "me.shedaniel:RoughlyEnoughItems-api:${rootProject.common_REI_version}"
}

publishing {
Expand Down
20 changes: 13 additions & 7 deletions common/src/main/java/com/aviatorrob06/disx/DisxMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@
import com.aviatorrob06.disx.commands.DisxSoundCommand;
import com.aviatorrob06.disx.entities.DisxAdvancedJukeboxEntity;
import com.aviatorrob06.disx.items.*;
import com.aviatorrob06.disx.recipe_types.DisxCustomDiscRecipe;
import com.aviatorrob06.disx.recipe_types.DisxStampRecipe;
import com.google.common.base.Suppliers;
import dev.architectury.event.events.client.ClientLifecycleEvent;
import dev.architectury.event.events.common.LifecycleEvent;
import dev.architectury.event.events.common.PlayerEvent;
import dev.architectury.event.events.common.TickEvent;
Expand All @@ -25,10 +26,11 @@
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntityType;
import org.slf4j.Logger;
Expand All @@ -41,7 +43,7 @@ public class DisxMain {

public static final Logger LOGGER = LoggerFactory.getLogger("disx");

public static final boolean debug = true;
public static final boolean debug = false;


public static final Supplier<RegistrarManager> REGISTRAR_MANAGER = Suppliers.memoize(() -> RegistrarManager.get(MOD_ID));
Expand All @@ -52,6 +54,8 @@ public static void init() {
Registrar<Block> blocksRegistrar = REGISTRAR_MANAGER.get().get(Registries.BLOCK);
Registrar<BlockEntityType<?>> blockEntityRegistrar = REGISTRAR_MANAGER.get().get(Registries.BLOCK_ENTITY_TYPE);
Registrar<CreativeModeTab> tabRegistrar = REGISTRAR_MANAGER.get().get(Registries.CREATIVE_MODE_TAB);
Registrar<RecipeSerializer<?>> serializerRegistrar = REGISTRAR_MANAGER.get().get(Registries.RECIPE_SERIALIZER);
Registrar<RecipeType<?>> recipeTypeRegistrar = REGISTRAR_MANAGER.get().get(Registries.RECIPE_TYPE);
//Creative Mode Tab Registration
RegistrySupplier<CreativeModeTab> creativeModeTab = tabRegistrar.register(new ResourceLocation("disx", "creativemodetab.disx"), () -> CreativeTabRegistry.create(Component.translatable("category.disx.tab"), () -> new ItemStack(itemsRegistrar.get(new ResourceLocation("disx", "blank_disc")))));
//Item Registration Calls
Expand Down Expand Up @@ -79,6 +83,12 @@ public static void init() {
DisxSoundCommand.registerCommand();
//Loot Modification Call
DisxLootModifiers.modifyLootTables(itemsRegistrar);
//Recipe & RecipeType Registration Calls
DisxCustomDiscRecipe.DisxCustomDiscRecipeType.registerRecipeType(recipeTypeRegistrar);
DisxCustomDiscRecipe.DisxCustomDiscRecipeSerializer.registerRecipeSerializer(serializerRegistrar);
DisxStampRecipe.DisxStampRecipeType.registerRecipeType(recipeTypeRegistrar);
DisxStampRecipe.DisxStampRecipeSerializer.registerSerializer(serializerRegistrar);


//Pull Mod Info
DisxModInfo.pullLatestVersion();
Expand All @@ -102,10 +112,6 @@ public static void init() {

LifecycleEvent.SERVER_STARTED.register(DisxSystemMessages::outdatedModVersion);

TickEvent.SERVER_POST.register(instance -> {
DisxCustomDisc.buildDiscFactorDiscTypes();
});

//Register Server Packets
DisxServerPacketIndex.registerServerPacketReceivers();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package com.aviatorrob06.disx;

import com.aviatorrob06.disx.client_only.DisxAudioPlayer;
import net.minecraft.client.Minecraft;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;

import java.util.UUID;

public class DisxServerAudioPlayerDetails {
private BlockPos blockPos;
private ResourceLocation dimension;
private UUID audioPlayerOwner;
private boolean serverOwned;
private String videoId;

private DisxServerVideoTimer videoTimer;
public DisxServerAudioPlayerDetails(BlockPos blockPos, ResourceLocation dimension,
UUID audioPlayerOwner, boolean fromServer, String videoId, boolean timerEnabled){
this.blockPos = blockPos;
this.dimension = dimension;
this.serverOwned = fromServer;
this.videoId = videoId;
if (timerEnabled){
this.videoTimer = new DisxServerVideoTimer(videoId, this);
}
if (!fromServer){
this.audioPlayerOwner = audioPlayerOwner;
} else {
this.audioPlayerOwner = UUID.randomUUID();
}
}

public UUID getAudioPlayerOwner() {
return audioPlayerOwner;
}

public BlockPos getBlockPos() {
return blockPos;
}

public ResourceLocation getDimension() {
return dimension;
}

public boolean isServerOwned() {
return serverOwned;
}

public DisxServerVideoTimer getVideoTimer() {
return videoTimer;
}

public String getVideoId() {
return videoId;
}

public void clearDetails(){
this.blockPos = null;
this.dimension = null;
this.audioPlayerOwner = null;
this.serverOwned = false;
this.videoTimer = null;
this.videoId = null;
}
}
Original file line number Diff line number Diff line change
@@ -1,87 +1,69 @@
package com.aviatorrob06.disx;

import com.aviatorrob06.disx.client_only.DisxAudioPlayerDetails;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import org.apache.logging.log4j.core.jmx.Server;

import javax.management.timer.Timer;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.CompletableFuture;

import static com.aviatorrob06.disx.DisxMain.debug;

public class DisxServerAudioPlayerRegistry {

public static List players = new ArrayList();
public static Map<BlockPos, String> registry = new HashMap<BlockPos, String>();

public static Map<BlockPos, videoTimer> timerRegistry = new HashMap<BlockPos, videoTimer>();

public static void sendPlayerRegistryEvent(BlockPos pos, String videoId, boolean fromSoundCommand, Player player) {
public static ArrayList<Player> players = new ArrayList<>();
public static ArrayList<DisxServerAudioPlayerDetails> registry = new ArrayList<>();

public static void addToRegistry(BlockPos pos, String videoId, boolean serverOwned, Player player, ResourceKey<Level> dimension){
ResourceLocation dimensionLocation = dimension.location();
boolean timerEnabled = true;
if (player.getServer().isSingleplayer()){
timerEnabled = false;
}
DisxServerAudioPlayerDetails serverAudioPlayerDetails = new DisxServerAudioPlayerDetails(pos, dimensionLocation, player.getUUID(), serverOwned, videoId, timerEnabled);
registry.add(serverAudioPlayerDetails);
players.forEach(plr -> {
DisxServerPacketIndex.ServerPackets.playerRegistryEvent("add", (Player) plr, pos, videoId, serverOwned, 0, dimensionLocation, player.getUUID());
});
}

public static void addToRegistry(BlockPos pos, String videoId, boolean fromSoundCommand, Player player){
registry.put(pos, videoId);
public static void removeFromRegistry(DisxServerAudioPlayerDetails audioPlayerDetails){
BlockPos pos = audioPlayerDetails.getBlockPos();
ResourceLocation dimensionLocation = audioPlayerDetails.getDimension();
players.forEach(plr -> {
if (plr.equals(player) && fromSoundCommand){
DisxServerPacketIndex.ServerPackets.playerRegistryEvent("add", (Player) plr, pos, videoId, fromSoundCommand, 0);
} else {
DisxServerPacketIndex.ServerPackets.playerRegistryEvent("add", (Player) plr, pos, videoId, false, 0);
}
DisxServerPacketIndex.ServerPackets.playerRegistryEvent("remove", (Player) plr, pos, null, false, 0, dimensionLocation, null);
});
if (!player.getServer().isSingleplayer()){
videoTimer timer = new videoTimer();
timerRegistry.put(pos, timer);
Runnable run = new Runnable() {
@Override
public void run() {
timer.videoTimer(pos, videoId);
}
};
CompletableFuture.runAsync(run);
}
registry.remove(audioPlayerDetails);
audioPlayerDetails.clearDetails();
}

public static void removeFromRegistry(BlockPos pos, String videoId){
public static void removeFromRegistry(BlockPos pos, ResourceKey<Level> dimension){
ResourceLocation dimensionLocation = dimension.location();
players.forEach(plr -> {
DisxServerPacketIndex.ServerPackets.playerRegistryEvent("remove", (Player) plr, pos, videoId, false, 0);
DisxServerPacketIndex.ServerPackets.playerRegistryEvent("remove", (Player) plr, pos, "", false, 0, dimensionLocation, UUID.randomUUID());
});
registry.remove(pos);
if (timerRegistry.containsKey(pos)){
timerRegistry.remove(pos);
ArrayList<DisxServerAudioPlayerDetails> toRemove = new ArrayList<>();
for (DisxServerAudioPlayerDetails details : registry){
if (details.getBlockPos().equals(pos) && details.getDimension().equals(dimensionLocation)){
toRemove.add(details);
}
}
for (DisxServerAudioPlayerDetails details : toRemove){
registry.remove(details);
}
}

public static void onServerClose(){
registry.clear();
}

public static class videoTimer{
long startTime = 0;
long elapsedSeconds = 0;

boolean forceStop = false;
public void videoTimer(BlockPos pos, String videoId){
if (debug) System.out.println("initializing timer");
int length = DisxYoutubeLengthScraper.getYoutubeVideoLength(videoId);
if (debug) System.out.println(length);
startTime = System.currentTimeMillis();
while (elapsedSeconds <= (length * 1000) && forceStop == false){
int test = 0;
elapsedSeconds = (System.currentTimeMillis() - startTime);
}
if (timerRegistry.containsValue(this)) {
removeFromRegistry(pos, videoId);
}
}
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.slf4j.LoggerFactory;

import java.awt.image.VolatileImage;
import java.util.UUID;

import static com.aviatorrob06.disx.DisxMain.debug;

Expand Down Expand Up @@ -62,21 +63,22 @@ public static void onPlayerSuccessStatusReceive(FriendlyByteBuf buf, NetworkMana
public static void onPlayerRegistryRequest(FriendlyByteBuf buf, NetworkManager.PacketContext context){
String name = "retrieveserverplayerregistry";
Player player = context.getPlayer();
DisxServerAudioPlayerRegistry.registry.entrySet().forEach(entry -> {
int seconds = 0;
if (DisxServerAudioPlayerRegistry.timerRegistry.containsKey(entry.getKey())){
seconds = (int) DisxServerAudioPlayerRegistry.timerRegistry.get(entry.getKey()).elapsedSeconds;
}
ServerPackets.playerRegistryEvent("add", player, entry.getKey(), entry.getValue(), false, seconds);
});
for (DisxServerAudioPlayerDetails details : DisxServerAudioPlayerRegistry.registry){
int seconds = (int) details.getVideoTimer().elapsedSeconds;
BlockPos blockPos = details.getBlockPos();
ResourceLocation dimensionLocation = details.getDimension();
String videoId = details.getVideoId();
UUID playerOwner = details.getAudioPlayerOwner();
ServerPackets.playerRegistryEvent("add", player, blockPos, videoId, false, seconds, dimensionLocation, playerOwner);
}
}

public static void onVideoIdPushRequest(FriendlyByteBuf buf, NetworkManager.PacketContext context){
String videoId = buf.readUtf();
BlockPos blockPos = buf.readBlockPos();
MinecraftServer server = context.getPlayer().getServer();
server.executeIfPossible(() -> {
BlockEntity entity = server.getLevel(Level.OVERWORLD).getBlockEntity(blockPos);
BlockEntity entity = context.getPlayer().level().getBlockEntity(blockPos);
if (entity == null){
DisxMain.LOGGER.info("ENTITY IS NULL");
} else {
Expand All @@ -92,13 +94,15 @@ public static void onVideoIdPushRequest(FriendlyByteBuf buf, NetworkManager.Pack

public class ServerPackets {

public static void playerRegistryEvent(String type, Player player, BlockPos pos, String videoId, Boolean fromSoundCommand, int seconds){
public static void playerRegistryEvent(String type, Player player, BlockPos pos, String videoId, boolean serverOwned, int seconds, ResourceLocation dimension, UUID playerOwner){
FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
buf.writeUtf(type);
buf.writeBlockPos(pos);
buf.writeUtf(videoId);
buf.writeBoolean(fromSoundCommand);
buf.writeBoolean(serverOwned);
buf.writeInt(seconds);
buf.writeResourceLocation(dimension);
buf.writeUUID(playerOwner);
NetworkManager.sendToPlayer((ServerPlayer) player, new ResourceLocation("disx","serveraudioregistryevent"), buf);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.aviatorrob06.disx;

import net.minecraft.core.BlockPos;

import java.util.concurrent.CompletableFuture;

import static com.aviatorrob06.disx.DisxMain.debug;

public class DisxServerVideoTimer {
long startTime = 0;
long elapsedSeconds = 0;

boolean forceStop = false;

String videoId;
DisxServerAudioPlayerDetails parent;

public DisxServerVideoTimer(String videoId, DisxServerAudioPlayerDetails parent){
this.videoId = videoId;
this.parent = parent;
CompletableFuture.runAsync(this::commenceTimer);
}

public void setForceStop(){
this.forceStop = true;
}
public void commenceTimer(){
if (debug) System.out.println("initializing timer");
int length = DisxYoutubeLengthScraper.getYoutubeVideoLength(videoId);
if (debug) System.out.println(length);
startTime = System.currentTimeMillis();
while (elapsedSeconds <= (length * 1000L) && !forceStop){
int test = 0;
elapsedSeconds = (System.currentTimeMillis() - startTime);
}
if (parent.getVideoTimer().equals(this)){
DisxServerAudioPlayerRegistry.removeFromRegistry(this.parent);
}
}
}
Loading

0 comments on commit b058538

Please sign in to comment.