From fbf1ff027e97b125692caef9d1b3cec7f250afb6 Mon Sep 17 00:00:00 2001 From: 132ikl <132ikl@gmail.com> Date: Sun, 29 Apr 2018 22:25:06 -0400 Subject: [PATCH 1/5] Removed client side item, added /blocklog --- README.md | 7 ++- .../ru/lionzxy/fastlogblock/FastLogBlock.java | 28 +++-------- .../handlers/EventHandlingManager.java | 12 ++--- .../lionzxy/fastlogblock/ui/InfoCommand.java | 47 +++++++++++++++++++ .../ru/lionzxy/fastlogblock/ui/InfoItem.java | 45 ------------------ .../fastlogblock/utils/MinecraftUtils.java | 10 ---- 6 files changed, 64 insertions(+), 85 deletions(-) create mode 100644 src/main/java/ru/lionzxy/fastlogblock/ui/InfoCommand.java delete mode 100644 src/main/java/ru/lionzxy/fastlogblock/ui/InfoItem.java delete mode 100644 src/main/java/ru/lionzxy/fastlogblock/utils/MinecraftUtils.java diff --git a/README.md b/README.md index 4a9772c..dc556ce 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ -# Fast Log Block [![Build Status](https://travis-ci.org/LionZXY/FastLogBlock.svg?branch=master)](https://travis-ci.org/LionZXY/FastLogBlock) [![codecov](https://codecov.io/gh/LionZXY/FastLogBlock/branch/master/graph/badge.svg)](https://codecov.io/gh/LionZXY/FastLogBlock) +# Fast Log Block - Server Side Version -This is minecraft mod for easy and fast logging block place and break. +This is server-side only Minecraft Forge mod for easy and fast logging block place and break. + +## How to use: +Simply type /blocklog when looking at a block to see the block's history. ## Event multithread handling ![](https://image.ibb.co/hyaPRw/Fast_Log_Block.png) diff --git a/src/main/java/ru/lionzxy/fastlogblock/FastLogBlock.java b/src/main/java/ru/lionzxy/fastlogblock/FastLogBlock.java index aff1965..2961b1d 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/FastLogBlock.java +++ b/src/main/java/ru/lionzxy/fastlogblock/FastLogBlock.java @@ -1,52 +1,36 @@ package ru.lionzxy.fastlogblock; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.item.Item; - -import net.minecraftforge.client.event.ModelRegistryEvent; -import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.FMLLog; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; import net.minecraftforge.fml.common.event.FMLServerStoppedEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; import ru.lionzxy.fastlogblock.handlers.EventHandlingManager; -import ru.lionzxy.fastlogblock.ui.InfoItem; +import ru.lionzxy.fastlogblock.ui.InfoCommand; import java.io.IOException; -@Mod(modid = FastLogBlock.MODID, version = FastLogBlock.VERSION, updateJSON = "https://raw.githubusercontent.com/LionZXY/FastLogBlock/master/update.json") +@Mod(modid = FastLogBlock.MODID, version = FastLogBlock.VERSION, updateJSON = "https://raw.githubusercontent.com/LionZXY/FastLogBlock/master/update.json", serverSideOnly = true, acceptableRemoteVersions = "*") public class FastLogBlock { public static final String MODID = "fastlogblock"; public static final String VERSION = "1.0.2"; private EventHandlingManager eventHandlingManager; - private InfoItem infoitem; @EventHandler public void preInit(FMLPreInitializationEvent event) throws IOException { FMLLog.log.info("Initializing eventHandlingManager..."); eventHandlingManager = new EventHandlingManager(); - this.infoitem = new InfoItem(eventHandlingManager); FMLLog.log.info("Done!"); MinecraftForge.EVENT_BUS.register(eventHandlingManager); MinecraftForge.EVENT_BUS.register(this); } - - @SubscribeEvent - @SideOnly(Side.CLIENT) - public void registerModels(ModelRegistryEvent event){ - ModelLoader.setCustomModelResourceLocation(infoitem, 0, new ModelResourceLocation(infoitem.getRegistryName(), "inventory")); - } - @SubscribeEvent - public void registerItems(RegistryEvent.Register event) { - event.getRegistry().registerAll(infoitem); + @Mod.EventHandler + public void serverStarting(FMLServerStartingEvent event) { + event.registerServerCommand(new InfoCommand(eventHandlingManager)); } @EventHandler diff --git a/src/main/java/ru/lionzxy/fastlogblock/handlers/EventHandlingManager.java b/src/main/java/ru/lionzxy/fastlogblock/handlers/EventHandlingManager.java index 79748d6..6f92751 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/handlers/EventHandlingManager.java +++ b/src/main/java/ru/lionzxy/fastlogblock/handlers/EventHandlingManager.java @@ -2,7 +2,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.translation.I18n; import net.minecraft.world.World; import net.minecraftforge.event.world.BlockEvent; @@ -60,9 +60,9 @@ public void flushUIWait(TickEvent.ServerTickEvent event) { notifyAboutEvent(blockEvent, findTaskResult.getEntityPlayer()); } if (findTaskResult.getBlockChangeEventModels().isEmpty()) { - findTaskResult.getEntityPlayer().sendMessage(new TextComponentTranslation("message.fastlogblock:blockinfo.event.empty")); + findTaskResult.getEntityPlayer().sendMessage(new TextComponentString("§3[FastLogBlock]§f Not found changes with block")); } else { - findTaskResult.getEntityPlayer().sendMessage(new TextComponentTranslation("message.fastlogblock:blockinfo.event.done")); + findTaskResult.getEntityPlayer().sendMessage(new TextComponentString("§3[FastLogBlock]§f Done!")); } } } @@ -95,14 +95,14 @@ private void notifyAboutEvent(BlockChangeEventModel blockEvent, EntityPlayer ent final String[] args = new String[]{new SimpleDateFormat(dateformat).format(new Date(blockEvent.getTimestamp().getTime())), nickname, blockEvent.getNameblock().toString()}; - TextComponentTranslation textComponent; + TextComponentString textComponent; switch (blockEvent.getBlockChangeType()) { default: case INSERT: - textComponent = new TextComponentTranslation("message.fastlogblock:blockinfo.event.insert", (Object[]) args); + textComponent = new TextComponentString("§2[+]§6["+args[0]+"§6]§f "+args[1]+": "+args[2]); break; case REMOVE: - textComponent = new TextComponentTranslation("message.fastlogblock:blockinfo.event.remove", (Object[]) args); + textComponent = new TextComponentString("§4[-]§6["+args[0]+"§6]§f "+args[1]+": "+args[2]); } entityPlayer.sendMessage(textComponent); } diff --git a/src/main/java/ru/lionzxy/fastlogblock/ui/InfoCommand.java b/src/main/java/ru/lionzxy/fastlogblock/ui/InfoCommand.java new file mode 100644 index 0000000..17070ab --- /dev/null +++ b/src/main/java/ru/lionzxy/fastlogblock/ui/InfoCommand.java @@ -0,0 +1,47 @@ +package ru.lionzxy.fastlogblock.ui; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.TextComponentString; +import ru.lionzxy.fastlogblock.handlers.EventHandlingManager; + + +public class InfoCommand extends CommandBase { + private final EventHandlingManager eventHandlingManager; + + public InfoCommand(EventHandlingManager eventHandlingManager) { + this.eventHandlingManager = eventHandlingManager; + } + + @Override + public String getName() { return "blocklog"; } + + @Override + public String getUsage(ICommandSender sender) { return "/blocklog"; } + + @Override + public int getRequiredPermissionLevel() { return 4; } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException { + if (sender instanceof EntityPlayer) { + RayTraceResult lookingAt = rayTrace(8, sender); + sender.sendMessage(new TextComponentString("§3[FastLogBlock]§f Start computing log for Position " + lookingAt.getBlockPos().getX() + lookingAt.getBlockPos().getY() + lookingAt.getBlockPos().getZ())); + eventHandlingManager.handleLogByPos(((EntityPlayer)sender), lookingAt.getBlockPos(), ((EntityPlayer)sender).world); + } + } + + public RayTraceResult rayTrace(double blockReachDistance, ICommandSender sender) + { + Vec3d vec3d = ((EntityPlayer)sender).getPositionEyes(1.0f); + Vec3d vec3d1 = ((EntityPlayer)sender).getLook(1.0f); + Vec3d vec3d2 = vec3d.addVector(vec3d1.x * blockReachDistance, vec3d1.y * blockReachDistance, vec3d1.z * blockReachDistance); + return ((EntityPlayer)sender).world.rayTraceBlocks(vec3d, vec3d2, false, false, true); + } + +} \ No newline at end of file diff --git a/src/main/java/ru/lionzxy/fastlogblock/ui/InfoItem.java b/src/main/java/ru/lionzxy/fastlogblock/ui/InfoItem.java deleted file mode 100644 index 281a468..0000000 --- a/src/main/java/ru/lionzxy/fastlogblock/ui/InfoItem.java +++ /dev/null @@ -1,45 +0,0 @@ -package ru.lionzxy.fastlogblock.ui; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import ru.lionzxy.fastlogblock.FastLogBlock; -import ru.lionzxy.fastlogblock.handlers.EventHandlingManager; -import ru.lionzxy.fastlogblock.utils.MinecraftUtils; - -import java.util.Objects; - -public class InfoItem extends Item { - private static final String ITEMNAME = "infoitem"; - private final EventHandlingManager eventHandlingManager; - - public InfoItem(EventHandlingManager eventHandlingManager) { - this.eventHandlingManager = eventHandlingManager; - setRegistryName(FastLogBlock.MODID, ITEMNAME); - final ResourceLocation registryName = Objects.requireNonNull(getRegistryName()); - setUnlocalizedName(registryName.toString()); - setCreativeTab(CreativeTabs.MISC); - } - - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { - if (worldIn.isRemote) { - return EnumActionResult.FAIL; - } - if (!MinecraftUtils.canShowLog(player)) { - player.sendMessage(new TextComponentTranslation("message.fastlogblock:blockinfo.event.permissionerror")); - return EnumActionResult.FAIL; - } - player.sendMessage(new TextComponentTranslation("message.fastlogblock:blockinfo.start", pos.getX(), pos.getY(), pos.getZ())); - eventHandlingManager.handleLogByPos(player, pos, worldIn); - return EnumActionResult.SUCCESS; - } -} diff --git a/src/main/java/ru/lionzxy/fastlogblock/utils/MinecraftUtils.java b/src/main/java/ru/lionzxy/fastlogblock/utils/MinecraftUtils.java deleted file mode 100644 index 9f78b6f..0000000 --- a/src/main/java/ru/lionzxy/fastlogblock/utils/MinecraftUtils.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.lionzxy.fastlogblock.utils; - -import net.minecraft.entity.player.EntityPlayer; -import ru.lionzxy.fastlogblock.config.LogConfig; - -public class MinecraftUtils { - public static boolean canShowLog(EntityPlayer player) { - return !LogConfig.onlyForOP || player.getEntityWorld().getMinecraftServer().isSinglePlayer() || player.canUseCommand(player.getEntityWorld().getMinecraftServer().getOpPermissionLevel(), ""); - } -} From 2cae0022fb9e94ebd6bbf63f623cf2e79f7381ba Mon Sep 17 00:00:00 2001 From: 132ikl <132@ikl.sh> Date: Fri, 29 May 2020 23:21:29 -0400 Subject: [PATCH 2/5] Update to ForgeGradle 3+, add copyright notice, rename package to FastLogBlockServer --- build.gradle | 51 +---- gradle/wrapper/gradle-wrapper.jar | Bin 54417 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew.bat | 174 +++++++++--------- .../FastLogBlockServer.java} | 29 ++- .../fastlogblockserver}/config/LogConfig.java | 33 +++- .../handlers/EventHandlingManager.java | 33 +++- .../handlers/SplitterRunnable.java | 41 +++-- .../fastlogblockserver}/io/ReadRunnable.java | 33 +++- .../fastlogblockserver}/io/WriteRunnable.java | 31 +++- .../io/base/IterrateByteFile.java | 23 ++- .../io/filesplitter/FileSplitterEnum.java | 26 +++ .../io/filesplitter/FileSplitterManager.java | 23 +++ .../io/filesplitter/IFileSplitter.java | 37 ++++ .../impl/BlockHashFileSplitter.java | 25 ++- .../filesplitter/impl/SingleFileSplitter.java | 23 ++- .../fastlogblockserver}/io/log/LogReader.java | 41 +++-- .../io/log/LogWritter.java | 31 +++- .../io/mappers/BlockMapper.java | 27 ++- .../io/mappers/NickMapper.java | 31 +++- .../models/ASCIString.java | 21 ++- .../models/BlockChangeEventModel.java | 25 ++- .../BlockChangeEventModelWithWorld.java | 38 ++++ .../models/BlockChangeType.java | 45 +++++ .../fastlogblockserver}/models/FindTask.java | 21 ++- .../models/FindTaskResult.java | 43 +++++ .../models/IFindResultListener.java | 29 +++ .../models/PrepareReadBlockChangeEvent.java | 21 ++- .../fastlogblockserver}/ui/InfoCommand.java | 23 ++- .../utils/CollectionUtils.java | 40 ++++ .../fastlogblockserver/utils/Constants.java | 25 +++ .../fastlogblockserver/utils/FileUtils.java | 38 ++++ .../io/filesplitter/FileSplitterEnum.java | 7 - .../io/filesplitter/FileSplitterManager.java | 4 - .../io/filesplitter/IFileSplitter.java | 18 -- .../BlockChangeEventModelWithWorld.java | 19 -- .../fastlogblock/models/BlockChangeType.java | 26 --- .../fastlogblock/models/FindTaskResult.java | 24 --- .../models/IFindResultListener.java | 10 - .../fastlogblock/utils/CollectionUtils.java | 21 --- .../lionzxy/fastlogblock/utils/Constants.java | 6 - .../lionzxy/fastlogblock/utils/FileUtils.java | 19 -- .../io/BlockMapperAsyncTest.java | 6 +- .../io/BlockMapperSaveTest.java | 6 +- .../fastlogblockserver}/io/LogTest.java | 16 +- .../io/NickMapperAsyncTest.java | 6 +- .../io/NickMapperSaveTest.java | 6 +- .../io/WriteReadRunnableTest.java | 16 +- .../fastlogblockserver}/utils/ASCITest.java | 4 +- .../fastlogblockserver}/utils/TestUtils.java | 2 +- 50 files changed, 904 insertions(+), 397 deletions(-) rename src/main/java/{ru/lionzxy/fastlogblock/FastLogBlock.java => club/moddedminecraft/fastlogblockserver/FastLogBlockServer.java} (50%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/config/LogConfig.java (64%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/handlers/EventHandlingManager.java (79%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/handlers/SplitterRunnable.java (67%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/ReadRunnable.java (60%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/WriteRunnable.java (68%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/base/IterrateByteFile.java (74%) create mode 100644 src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/FileSplitterEnum.java create mode 100644 src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/FileSplitterManager.java create mode 100644 src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/IFileSplitter.java rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/filesplitter/impl/BlockHashFileSplitter.java (66%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/filesplitter/impl/SingleFileSplitter.java (55%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/log/LogReader.java (72%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/log/LogWritter.java (64%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/mappers/BlockMapper.java (79%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/mappers/NickMapper.java (77%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/models/ASCIString.java (67%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/models/BlockChangeEventModel.java (79%) create mode 100644 src/main/java/club/moddedminecraft/fastlogblockserver/models/BlockChangeEventModelWithWorld.java create mode 100644 src/main/java/club/moddedminecraft/fastlogblockserver/models/BlockChangeType.java rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/models/FindTask.java (52%) create mode 100644 src/main/java/club/moddedminecraft/fastlogblockserver/models/FindTaskResult.java create mode 100644 src/main/java/club/moddedminecraft/fastlogblockserver/models/IFindResultListener.java rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/models/PrepareReadBlockChangeEvent.java (64%) rename src/main/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/ui/InfoCommand.java (67%) create mode 100644 src/main/java/club/moddedminecraft/fastlogblockserver/utils/CollectionUtils.java create mode 100644 src/main/java/club/moddedminecraft/fastlogblockserver/utils/Constants.java create mode 100644 src/main/java/club/moddedminecraft/fastlogblockserver/utils/FileUtils.java delete mode 100644 src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/FileSplitterEnum.java delete mode 100644 src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/FileSplitterManager.java delete mode 100644 src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/IFileSplitter.java delete mode 100644 src/main/java/ru/lionzxy/fastlogblock/models/BlockChangeEventModelWithWorld.java delete mode 100644 src/main/java/ru/lionzxy/fastlogblock/models/BlockChangeType.java delete mode 100644 src/main/java/ru/lionzxy/fastlogblock/models/FindTaskResult.java delete mode 100644 src/main/java/ru/lionzxy/fastlogblock/models/IFindResultListener.java delete mode 100644 src/main/java/ru/lionzxy/fastlogblock/utils/CollectionUtils.java delete mode 100644 src/main/java/ru/lionzxy/fastlogblock/utils/Constants.java delete mode 100644 src/main/java/ru/lionzxy/fastlogblock/utils/FileUtils.java rename src/test/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/BlockMapperAsyncTest.java (96%) rename src/test/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/BlockMapperSaveTest.java (94%) rename src/test/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/LogTest.java (85%) rename src/test/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/NickMapperAsyncTest.java (92%) rename src/test/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/NickMapperSaveTest.java (91%) rename src/test/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/io/WriteReadRunnableTest.java (86%) rename src/test/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/utils/ASCITest.java (75%) rename src/test/java/{ru/lionzxy/fastlogblock => club/moddedminecraft/fastlogblockserver}/utils/TestUtils.java (84%) diff --git a/build.gradle b/build.gradle index 173c147..6bdbcfb 100644 --- a/build.gradle +++ b/build.gradle @@ -1,21 +1,20 @@ buildscript { repositories { + maven { url = 'https://files.minecraftforge.net/maven' } jcenter() - maven { url = "http://files.minecraftforge.net/maven" } + mavenCentral() } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT' + classpath 'net.minecraftforge.gradle:ForgeGradle:3.+' } } apply plugin: 'java' apply plugin: 'jacoco' -apply plugin: 'net.minecraftforge.gradle.forge' -//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. - +apply plugin: 'net.minecraftforge.gradle' version = "1.0.3" -group = "ru.lionzxy.fastlogblock" // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = "FastLogBlock" +group = "club.moddedminecraft.fastlogblockserver" +archivesBaseName = "FastLogBlockServer" sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. compileJava { @@ -23,16 +22,7 @@ compileJava { } minecraft { - version = "1.12.2-14.23.1.2555" - runDir = "run" - - // the mappings can be changed at any time, and must be in the following format. - // snapshot_YYYYMMDD snapshot are built nightly. - // stable_# stables are built at the discretion of the MCP team. - // Use non-default mappings at your own risk. they may not always work. - // simply re-run your setup task after changing the mappings to update your workspace. - mappings = "snapshot_20171003" - // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. + mappings channel: 'snapshot', version: '20171003-1.12' } configurations { @@ -41,9 +31,11 @@ configurations { } dependencies { + minecraft 'net.minecraftforge:forge:1.12.2-14.23.5.2854' + + compile group: 'jline', name: 'jline', version: '2.14.6' embed "trove:trove:1.0.2" - // https://mvnrepository.com/artifact/org.mapdb/thread-weaver testCompile 'junit:junit:4.12' testCompile "org.mapdb:thread-weaver:3.0.mapdb" } @@ -55,26 +47,3 @@ jacocoTestReport { html.enabled false } } - -processResources { - // this will ensure that this task is redone when the versions change. - inputs.property "version", project.version - inputs.property "mcversion", project.minecraft.version - - // replace stuff in mcmod.info, nothing else - from(sourceSets.main.resources.srcDirs) { - include 'mcmod.info' - - // replace version and mcversion - expand 'version': project.version, 'mcversion': project.minecraft.version - } - - // copy everything else except the mcmod.info - from(sourceSets.main.resources.srcDirs) { - exclude 'mcmod.info' - } -} - -jar { - from configurations.embed.collect { it.isDirectory() ? it : zipTree(it) } -} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 758de960ec7947253b058ff79c88ce51f3abe08a..7a3265ee94c0ab25cf079ac8ccdf87f41d455d42 100644 GIT binary patch delta 23310 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 lv_yyfWdpa?w36n65=6@+niTCwLyU5 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 delta 23109 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

>Y0qoIt?wB%nO@p&gUI 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 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/src/main/java/ru/lionzxy/fastlogblock/FastLogBlock.java b/src/main/java/club/moddedminecraft/fastlogblockserver/FastLogBlockServer.java similarity index 50% rename from src/main/java/ru/lionzxy/fastlogblock/FastLogBlock.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/FastLogBlockServer.java index 2961b1d..9f66722 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/FastLogBlock.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/FastLogBlockServer.java @@ -1,5 +1,25 @@ -package ru.lionzxy.fastlogblock; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ +package club.moddedminecraft.fastlogblockserver; + +import club.moddedminecraft.fastlogblockserver.handlers.EventHandlingManager; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.FMLLog; import net.minecraftforge.fml.common.Mod; @@ -8,13 +28,12 @@ import net.minecraftforge.fml.common.event.FMLServerStartingEvent; import net.minecraftforge.fml.common.event.FMLServerStoppedEvent; -import ru.lionzxy.fastlogblock.handlers.EventHandlingManager; -import ru.lionzxy.fastlogblock.ui.InfoCommand; +import club.moddedminecraft.fastlogblockserver.ui.InfoCommand; import java.io.IOException; -@Mod(modid = FastLogBlock.MODID, version = FastLogBlock.VERSION, updateJSON = "https://raw.githubusercontent.com/LionZXY/FastLogBlock/master/update.json", serverSideOnly = true, acceptableRemoteVersions = "*") -public class FastLogBlock { +@Mod(modid = FastLogBlockServer.MODID, version = FastLogBlockServer.VERSION, updateJSON = "https://raw.githubusercontent.com/LionZXY/FastLogBlock/master/update.json", serverSideOnly = true, acceptableRemoteVersions = "*") +public class FastLogBlockServer { public static final String MODID = "fastlogblock"; public static final String VERSION = "1.0.2"; private EventHandlingManager eventHandlingManager; diff --git a/src/main/java/ru/lionzxy/fastlogblock/config/LogConfig.java b/src/main/java/club/moddedminecraft/fastlogblockserver/config/LogConfig.java similarity index 64% rename from src/main/java/ru/lionzxy/fastlogblock/config/LogConfig.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/config/LogConfig.java index 3ba1bc4..008c965 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/config/LogConfig.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/config/LogConfig.java @@ -1,4 +1,23 @@ -package ru.lionzxy.fastlogblock.config; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.config; import net.minecraftforge.common.config.Config; @@ -6,10 +25,10 @@ import net.minecraftforge.fml.client.event.ConfigChangedEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import ru.lionzxy.fastlogblock.FastLogBlock; -import ru.lionzxy.fastlogblock.io.filesplitter.FileSplitterEnum; +import club.moddedminecraft.fastlogblockserver.FastLogBlockServer; +import club.moddedminecraft.fastlogblockserver.io.filesplitter.FileSplitterEnum; -@Config(modid = FastLogBlock.MODID) +@Config(modid = FastLogBlockServer.MODID) @Config.LangKey("fastlogblock.config.title") public class LogConfig { @Config.Comment("Enable handling event") @@ -40,7 +59,7 @@ public static class HashConfig { public final String fileNamePattern = "part%d.bytelog"; } - @Mod.EventBusSubscriber(modid = FastLogBlock.MODID) + @Mod.EventBusSubscriber(modid = FastLogBlockServer.MODID) private static class EventHandler { /** @@ -50,8 +69,8 @@ private static class EventHandler { */ @SubscribeEvent public static void onConfigChanged(final ConfigChangedEvent.OnConfigChangedEvent event) { - if (event.getModID().equals(FastLogBlock.MODID)) { - ConfigManager.sync(FastLogBlock.MODID, Config.Type.INSTANCE); + if (event.getModID().equals(FastLogBlockServer.MODID)) { + ConfigManager.sync(FastLogBlockServer.MODID, Config.Type.INSTANCE); } } } diff --git a/src/main/java/ru/lionzxy/fastlogblock/handlers/EventHandlingManager.java b/src/main/java/club/moddedminecraft/fastlogblockserver/handlers/EventHandlingManager.java similarity index 79% rename from src/main/java/ru/lionzxy/fastlogblock/handlers/EventHandlingManager.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/handlers/EventHandlingManager.java index 6f92751..46a7c99 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/handlers/EventHandlingManager.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/handlers/EventHandlingManager.java @@ -1,5 +1,29 @@ -package ru.lionzxy.fastlogblock.handlers; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ +package club.moddedminecraft.fastlogblockserver.handlers; + +import club.moddedminecraft.fastlogblockserver.config.LogConfig; +import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModel; +import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModelWithWorld; +import club.moddedminecraft.fastlogblockserver.models.FindTask; +import club.moddedminecraft.fastlogblockserver.models.FindTaskResult; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextComponentString; @@ -9,12 +33,7 @@ import net.minecraftforge.fml.common.FMLLog; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; -import ru.lionzxy.fastlogblock.config.LogConfig; -import ru.lionzxy.fastlogblock.io.ReadRunnable; -import ru.lionzxy.fastlogblock.models.BlockChangeEventModel; -import ru.lionzxy.fastlogblock.models.BlockChangeEventModelWithWorld; -import ru.lionzxy.fastlogblock.models.FindTask; -import ru.lionzxy.fastlogblock.models.FindTaskResult; +import club.moddedminecraft.fastlogblockserver.io.ReadRunnable; import java.io.IOException; import java.text.SimpleDateFormat; diff --git a/src/main/java/ru/lionzxy/fastlogblock/handlers/SplitterRunnable.java b/src/main/java/club/moddedminecraft/fastlogblockserver/handlers/SplitterRunnable.java similarity index 67% rename from src/main/java/ru/lionzxy/fastlogblock/handlers/SplitterRunnable.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/handlers/SplitterRunnable.java index 4d1f15b..5c94c0a 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/handlers/SplitterRunnable.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/handlers/SplitterRunnable.java @@ -1,15 +1,34 @@ -package ru.lionzxy.fastlogblock.handlers; - +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.handlers; + +import club.moddedminecraft.fastlogblockserver.config.LogConfig; +import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModelWithWorld; import net.minecraftforge.fml.common.FMLLog; -import ru.lionzxy.fastlogblock.config.LogConfig; -import ru.lionzxy.fastlogblock.io.ReadRunnable; -import ru.lionzxy.fastlogblock.io.WriteRunnable; -import ru.lionzxy.fastlogblock.io.filesplitter.IFileSplitter; -import ru.lionzxy.fastlogblock.io.filesplitter.impl.BlockHashFileSplitter; -import ru.lionzxy.fastlogblock.io.filesplitter.impl.SingleFileSplitter; -import ru.lionzxy.fastlogblock.io.mappers.BlockMapper; -import ru.lionzxy.fastlogblock.io.mappers.NickMapper; -import ru.lionzxy.fastlogblock.models.BlockChangeEventModelWithWorld; +import club.moddedminecraft.fastlogblockserver.io.ReadRunnable; +import club.moddedminecraft.fastlogblockserver.io.WriteRunnable; +import club.moddedminecraft.fastlogblockserver.io.filesplitter.IFileSplitter; +import club.moddedminecraft.fastlogblockserver.io.filesplitter.impl.BlockHashFileSplitter; +import club.moddedminecraft.fastlogblockserver.io.filesplitter.impl.SingleFileSplitter; +import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; +import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; import java.io.File; import java.io.IOException; diff --git a/src/main/java/ru/lionzxy/fastlogblock/io/ReadRunnable.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/ReadRunnable.java similarity index 60% rename from src/main/java/ru/lionzxy/fastlogblock/io/ReadRunnable.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/io/ReadRunnable.java index 26e299a..cbaff96 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/io/ReadRunnable.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/ReadRunnable.java @@ -1,12 +1,31 @@ -package ru.lionzxy.fastlogblock.io; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ +package club.moddedminecraft.fastlogblockserver.io; + +import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModel; +import club.moddedminecraft.fastlogblockserver.models.FindTask; import net.minecraftforge.fml.common.FMLLog; -import ru.lionzxy.fastlogblock.io.filesplitter.IFileSplitter; -import ru.lionzxy.fastlogblock.io.log.LogReader; -import ru.lionzxy.fastlogblock.io.mappers.BlockMapper; -import ru.lionzxy.fastlogblock.io.mappers.NickMapper; -import ru.lionzxy.fastlogblock.models.BlockChangeEventModel; -import ru.lionzxy.fastlogblock.models.FindTask; +import club.moddedminecraft.fastlogblockserver.io.filesplitter.IFileSplitter; +import club.moddedminecraft.fastlogblockserver.io.log.LogReader; +import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; +import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; import java.io.File; import java.util.List; diff --git a/src/main/java/ru/lionzxy/fastlogblock/io/WriteRunnable.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/WriteRunnable.java similarity index 68% rename from src/main/java/ru/lionzxy/fastlogblock/io/WriteRunnable.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/io/WriteRunnable.java index 69267a6..0fe73af 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/io/WriteRunnable.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/WriteRunnable.java @@ -1,11 +1,30 @@ -package ru.lionzxy.fastlogblock.io; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ +package club.moddedminecraft.fastlogblockserver.io; + +import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModelWithWorld; import net.minecraftforge.fml.common.FMLLog; -import ru.lionzxy.fastlogblock.io.filesplitter.IFileSplitter; -import ru.lionzxy.fastlogblock.io.log.LogWritter; -import ru.lionzxy.fastlogblock.io.mappers.BlockMapper; -import ru.lionzxy.fastlogblock.io.mappers.NickMapper; -import ru.lionzxy.fastlogblock.models.BlockChangeEventModelWithWorld; +import club.moddedminecraft.fastlogblockserver.io.filesplitter.IFileSplitter; +import club.moddedminecraft.fastlogblockserver.io.log.LogWritter; +import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; +import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; import java.io.File; import java.io.IOException; diff --git a/src/main/java/ru/lionzxy/fastlogblock/io/base/IterrateByteFile.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/base/IterrateByteFile.java similarity index 74% rename from src/main/java/ru/lionzxy/fastlogblock/io/base/IterrateByteFile.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/io/base/IterrateByteFile.java index 6ec2858..ebda5d4 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/io/base/IterrateByteFile.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/base/IterrateByteFile.java @@ -1,8 +1,27 @@ -package ru.lionzxy.fastlogblock.io.base; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.io.base; import gnu.trove.list.array.TByteArrayList; import net.minecraftforge.fml.common.FMLLog; -import ru.lionzxy.fastlogblock.utils.FileUtils; +import club.moddedminecraft.fastlogblockserver.utils.FileUtils; import java.io.*; import java.nio.file.Files; diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/FileSplitterEnum.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/FileSplitterEnum.java new file mode 100644 index 0000000..3aa0585 --- /dev/null +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/FileSplitterEnum.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.io.filesplitter; + +public enum FileSplitterEnum { + SINGLE, + BLOCKHASH; + +} diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/FileSplitterManager.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/FileSplitterManager.java new file mode 100644 index 0000000..cb1876e --- /dev/null +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/FileSplitterManager.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.io.filesplitter; + +public class FileSplitterManager { +} diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/IFileSplitter.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/IFileSplitter.java new file mode 100644 index 0000000..7e171d7 --- /dev/null +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/IFileSplitter.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.io.filesplitter; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import java.io.File; + +public abstract class IFileSplitter { + protected final File modFolder; + + public IFileSplitter(final File modFolder) { + this.modFolder = modFolder; + } + + public abstract File[] getAllLogFile(); + + public abstract File getFileByPosAndWorld(BlockPos blockPos, World world); +} diff --git a/src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/impl/BlockHashFileSplitter.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/impl/BlockHashFileSplitter.java similarity index 66% rename from src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/impl/BlockHashFileSplitter.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/impl/BlockHashFileSplitter.java index 6ff5166..02e4ed8 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/impl/BlockHashFileSplitter.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/impl/BlockHashFileSplitter.java @@ -1,10 +1,29 @@ -package ru.lionzxy.fastlogblock.io.filesplitter.impl; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ +package club.moddedminecraft.fastlogblockserver.io.filesplitter.impl; + +import club.moddedminecraft.fastlogblockserver.config.LogConfig; +import club.moddedminecraft.fastlogblockserver.io.filesplitter.IFileSplitter; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; -import ru.lionzxy.fastlogblock.config.LogConfig; -import ru.lionzxy.fastlogblock.io.filesplitter.IFileSplitter; import java.io.File; import java.util.ArrayList; diff --git a/src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/impl/SingleFileSplitter.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/impl/SingleFileSplitter.java similarity index 55% rename from src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/impl/SingleFileSplitter.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/impl/SingleFileSplitter.java index 1a6984d..7acf946 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/impl/SingleFileSplitter.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/impl/SingleFileSplitter.java @@ -1,9 +1,28 @@ -package ru.lionzxy.fastlogblock.io.filesplitter.impl; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ +package club.moddedminecraft.fastlogblockserver.io.filesplitter.impl; + +import club.moddedminecraft.fastlogblockserver.io.filesplitter.IFileSplitter; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; -import ru.lionzxy.fastlogblock.io.filesplitter.IFileSplitter; import java.io.File; diff --git a/src/main/java/ru/lionzxy/fastlogblock/io/log/LogReader.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogReader.java similarity index 72% rename from src/main/java/ru/lionzxy/fastlogblock/io/log/LogReader.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogReader.java index e02aaba..7e57e73 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/io/log/LogReader.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogReader.java @@ -1,5 +1,28 @@ -package ru.lionzxy.fastlogblock.io.log; - +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.io.log; + +import club.moddedminecraft.fastlogblockserver.models.ASCIString; +import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModel; +import club.moddedminecraft.fastlogblockserver.models.BlockChangeType; +import club.moddedminecraft.fastlogblockserver.models.PrepareReadBlockChangeEvent; import gnu.trove.list.array.TByteArrayList; import gnu.trove.map.TIntObjectMap; import gnu.trove.map.TLongObjectMap; @@ -9,15 +32,11 @@ import gnu.trove.set.hash.TLongHashSet; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.common.FMLLog; -import ru.lionzxy.fastlogblock.io.base.IterrateByteFile; -import ru.lionzxy.fastlogblock.io.mappers.BlockMapper; -import ru.lionzxy.fastlogblock.io.mappers.NickMapper; -import ru.lionzxy.fastlogblock.models.ASCIString; -import ru.lionzxy.fastlogblock.models.BlockChangeEventModel; -import ru.lionzxy.fastlogblock.models.BlockChangeType; -import ru.lionzxy.fastlogblock.models.PrepareReadBlockChangeEvent; -import ru.lionzxy.fastlogblock.utils.CollectionUtils; -import ru.lionzxy.fastlogblock.utils.Constants; +import club.moddedminecraft.fastlogblockserver.io.base.IterrateByteFile; +import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; +import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; +import club.moddedminecraft.fastlogblockserver.utils.CollectionUtils; +import club.moddedminecraft.fastlogblockserver.utils.Constants; import java.io.File; import java.io.IOException; diff --git a/src/main/java/ru/lionzxy/fastlogblock/io/log/LogWritter.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogWritter.java similarity index 64% rename from src/main/java/ru/lionzxy/fastlogblock/io/log/LogWritter.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogWritter.java index eed8572..a7d0a3a 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/io/log/LogWritter.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogWritter.java @@ -1,10 +1,29 @@ -package ru.lionzxy.fastlogblock.io.log; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ -import ru.lionzxy.fastlogblock.io.mappers.BlockMapper; -import ru.lionzxy.fastlogblock.io.mappers.NickMapper; -import ru.lionzxy.fastlogblock.models.BlockChangeEventModel; -import ru.lionzxy.fastlogblock.utils.Constants; -import ru.lionzxy.fastlogblock.utils.FileUtils; +package club.moddedminecraft.fastlogblockserver.io.log; + +import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModel; +import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; +import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; +import club.moddedminecraft.fastlogblockserver.utils.Constants; +import club.moddedminecraft.fastlogblockserver.utils.FileUtils; import java.io.BufferedOutputStream; import java.io.File; diff --git a/src/main/java/ru/lionzxy/fastlogblock/io/mappers/BlockMapper.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/mappers/BlockMapper.java similarity index 79% rename from src/main/java/ru/lionzxy/fastlogblock/io/mappers/BlockMapper.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/io/mappers/BlockMapper.java index fff2ec0..f567791 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/io/mappers/BlockMapper.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/mappers/BlockMapper.java @@ -1,13 +1,32 @@ -package ru.lionzxy.fastlogblock.io.mappers; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.io.mappers; +import club.moddedminecraft.fastlogblockserver.io.base.IterrateByteFile; +import club.moddedminecraft.fastlogblockserver.models.ASCIString; import com.google.common.annotations.VisibleForTesting; import gnu.trove.TObjectLongHashMap; import gnu.trove.list.array.TByteArrayList; import gnu.trove.map.TLongObjectMap; import gnu.trove.map.hash.TLongObjectHashMap; import gnu.trove.set.TLongSet; -import ru.lionzxy.fastlogblock.io.base.IterrateByteFile; -import ru.lionzxy.fastlogblock.models.ASCIString; import java.io.File; import java.io.IOException; @@ -16,7 +35,7 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.ReentrantReadWriteLock; -import static ru.lionzxy.fastlogblock.utils.Constants.DEVIDER_SYMBOL; +import static club.moddedminecraft.fastlogblockserver.utils.Constants.DEVIDER_SYMBOL; /** diff --git a/src/main/java/ru/lionzxy/fastlogblock/io/mappers/NickMapper.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/mappers/NickMapper.java similarity index 77% rename from src/main/java/ru/lionzxy/fastlogblock/io/mappers/NickMapper.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/io/mappers/NickMapper.java index 516f6e3..0ba99a2 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/io/mappers/NickMapper.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/mappers/NickMapper.java @@ -1,12 +1,31 @@ -package ru.lionzxy.fastlogblock.io.mappers; - +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.io.mappers; + +import club.moddedminecraft.fastlogblockserver.io.base.IterrateByteFile; +import club.moddedminecraft.fastlogblockserver.models.ASCIString; import com.google.common.annotations.VisibleForTesting; import gnu.trove.TIntObjectHashMap; import gnu.trove.TObjectIntHashMap; import gnu.trove.list.array.TByteArrayList; -import ru.lionzxy.fastlogblock.io.base.IterrateByteFile; -import ru.lionzxy.fastlogblock.models.ASCIString; -import ru.lionzxy.fastlogblock.utils.Constants; +import club.moddedminecraft.fastlogblockserver.utils.Constants; import java.io.File; import java.io.IOException; @@ -14,7 +33,7 @@ import java.nio.ByteBuffer; import java.util.concurrent.atomic.AtomicInteger; -import static ru.lionzxy.fastlogblock.utils.Constants.DEVIDER_SYMBOL; +import static club.moddedminecraft.fastlogblockserver.utils.Constants.DEVIDER_SYMBOL; public class NickMapper extends IterrateByteFile { private final AtomicInteger maxId = new AtomicInteger(Integer.MIN_VALUE); diff --git a/src/main/java/ru/lionzxy/fastlogblock/models/ASCIString.java b/src/main/java/club/moddedminecraft/fastlogblockserver/models/ASCIString.java similarity index 67% rename from src/main/java/ru/lionzxy/fastlogblock/models/ASCIString.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/models/ASCIString.java index 0200bee..7d0d91b 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/models/ASCIString.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/models/ASCIString.java @@ -1,4 +1,23 @@ -package ru.lionzxy.fastlogblock.models; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.models; import java.nio.charset.Charset; diff --git a/src/main/java/ru/lionzxy/fastlogblock/models/BlockChangeEventModel.java b/src/main/java/club/moddedminecraft/fastlogblockserver/models/BlockChangeEventModel.java similarity index 79% rename from src/main/java/ru/lionzxy/fastlogblock/models/BlockChangeEventModel.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/models/BlockChangeEventModel.java index c579a85..31fb741 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/models/BlockChangeEventModel.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/models/BlockChangeEventModel.java @@ -1,10 +1,29 @@ -package ru.lionzxy.fastlogblock.models; - +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.models; + +import club.moddedminecraft.fastlogblockserver.config.LogConfig; import jline.internal.Nullable; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraftforge.event.world.BlockEvent; -import ru.lionzxy.fastlogblock.config.LogConfig; import java.sql.Timestamp; diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/models/BlockChangeEventModelWithWorld.java b/src/main/java/club/moddedminecraft/fastlogblockserver/models/BlockChangeEventModelWithWorld.java new file mode 100644 index 0000000..451d398 --- /dev/null +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/models/BlockChangeEventModelWithWorld.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.models; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import java.sql.Timestamp; + +public class BlockChangeEventModelWithWorld extends BlockChangeEventModel { + private final World world; + + public BlockChangeEventModelWithWorld(BlockPos blockPos, String nameblock, String playernick, Timestamp timestamp, BlockChangeType blockChangeType, World world) { + super(blockPos, nameblock, playernick, timestamp, blockChangeType); + this.world = world; + } + + public World getWorld() { + return world; + } +} diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/models/BlockChangeType.java b/src/main/java/club/moddedminecraft/fastlogblockserver/models/BlockChangeType.java new file mode 100644 index 0000000..fb06e10 --- /dev/null +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/models/BlockChangeType.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.models; + +public enum BlockChangeType { + INSERT(0), + REMOVE(1), + UPDATE(2), + UNKNOWN(100); + private final byte typeId; + + BlockChangeType(final int typeid) { + this.typeId = (byte) typeid; + } + + public static BlockChangeType valueOf(final byte typeId) { + for (final BlockChangeType blockChangeType : BlockChangeType.values()) { + if (blockChangeType.getTypeId() == typeId) { + return blockChangeType; + } + } + return null; + } + + public byte getTypeId() { + return typeId; + } +} diff --git a/src/main/java/ru/lionzxy/fastlogblock/models/FindTask.java b/src/main/java/club/moddedminecraft/fastlogblockserver/models/FindTask.java similarity index 52% rename from src/main/java/ru/lionzxy/fastlogblock/models/FindTask.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/models/FindTask.java index 59b703c..b607276 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/models/FindTask.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/models/FindTask.java @@ -1,4 +1,23 @@ -package ru.lionzxy.fastlogblock.models; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.models; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/models/FindTaskResult.java b/src/main/java/club/moddedminecraft/fastlogblockserver/models/FindTaskResult.java new file mode 100644 index 0000000..0312fc4 --- /dev/null +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/models/FindTaskResult.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.models; + +import net.minecraft.entity.player.EntityPlayer; + +import java.util.List; + +public class FindTaskResult { + private final List blockChangeEventModels; + private final EntityPlayer entityPlayer; + + public FindTaskResult(List blockChangeEventModels, EntityPlayer entityPlayer) { + this.blockChangeEventModels = blockChangeEventModels; + this.entityPlayer = entityPlayer; + } + + public EntityPlayer getEntityPlayer() { + return entityPlayer; + } + + public List getBlockChangeEventModels() { + + return blockChangeEventModels; + } +} diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/models/IFindResultListener.java b/src/main/java/club/moddedminecraft/fastlogblockserver/models/IFindResultListener.java new file mode 100644 index 0000000..5434702 --- /dev/null +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/models/IFindResultListener.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.models; + +import jline.internal.Nullable; +import net.minecraft.entity.player.EntityPlayer; + +import java.util.List; + +public interface IFindResultListener { + void onResultAsync(List blockChangeEventModels, @Nullable EntityPlayer entityPlayer); +} diff --git a/src/main/java/ru/lionzxy/fastlogblock/models/PrepareReadBlockChangeEvent.java b/src/main/java/club/moddedminecraft/fastlogblockserver/models/PrepareReadBlockChangeEvent.java similarity index 64% rename from src/main/java/ru/lionzxy/fastlogblock/models/PrepareReadBlockChangeEvent.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/models/PrepareReadBlockChangeEvent.java index 1039e7c..171792b 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/models/PrepareReadBlockChangeEvent.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/models/PrepareReadBlockChangeEvent.java @@ -1,4 +1,23 @@ -package ru.lionzxy.fastlogblock.models; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.models; import gnu.trove.map.TIntObjectMap; import gnu.trove.map.TLongObjectMap; diff --git a/src/main/java/ru/lionzxy/fastlogblock/ui/InfoCommand.java b/src/main/java/club/moddedminecraft/fastlogblockserver/ui/InfoCommand.java similarity index 67% rename from src/main/java/ru/lionzxy/fastlogblock/ui/InfoCommand.java rename to src/main/java/club/moddedminecraft/fastlogblockserver/ui/InfoCommand.java index 17070ab..0f5c5c9 100644 --- a/src/main/java/ru/lionzxy/fastlogblock/ui/InfoCommand.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/ui/InfoCommand.java @@ -1,5 +1,25 @@ -package ru.lionzxy.fastlogblock.ui; +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ +package club.moddedminecraft.fastlogblockserver.ui; + +import club.moddedminecraft.fastlogblockserver.handlers.EventHandlingManager; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; @@ -8,7 +28,6 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.TextComponentString; -import ru.lionzxy.fastlogblock.handlers.EventHandlingManager; public class InfoCommand extends CommandBase { diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/utils/CollectionUtils.java b/src/main/java/club/moddedminecraft/fastlogblockserver/utils/CollectionUtils.java new file mode 100644 index 0000000..abfa662 --- /dev/null +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/utils/CollectionUtils.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.utils; + +import gnu.trove.map.TIntObjectMap; +import gnu.trove.map.hash.TIntObjectHashMap; +import gnu.trove.set.TIntSet; + +import java.util.function.Function; + +public class CollectionUtils { + + public static TIntObjectMap toHashMap(final TIntSet set, final Function mapper) { + final TIntObjectMap toReturn = new TIntObjectHashMap<>(); + + set.forEach((i) -> { + toReturn.put(i, mapper.apply(i)); + return true; + }); + + return toReturn; + } +} diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/utils/Constants.java b/src/main/java/club/moddedminecraft/fastlogblockserver/utils/Constants.java new file mode 100644 index 0000000..104d8d2 --- /dev/null +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/utils/Constants.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.utils; + +public class Constants { + public static final int SIZE_LOGLINE = Integer.BYTES * 4 + Long.BYTES * 2 + Byte.BYTES * 2; + public static final byte DEVIDER_SYMBOL = 28; +} diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/utils/FileUtils.java b/src/main/java/club/moddedminecraft/fastlogblockserver/utils/FileUtils.java new file mode 100644 index 0000000..6b95894 --- /dev/null +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/utils/FileUtils.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.utils; + +import java.io.File; +import java.io.IOException; + +public class FileUtils { + public static final int BYTEBUFFERSIZE = 2048; + + public static void createFileIfNotExist(final File file) throws IOException { + if (!file.exists()) { + if (file.getParentFile() != null && !file.getParentFile().exists() && !file.getParentFile().mkdirs()) { + throw new IOException("Can't create dir to file " + file.getParentFile().getAbsolutePath()); + } + if (!file.createNewFile()) { + throw new IOException("Can't create file " + file.getAbsolutePath()); + } + } + } +} diff --git a/src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/FileSplitterEnum.java b/src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/FileSplitterEnum.java deleted file mode 100644 index b06e1bd..0000000 --- a/src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/FileSplitterEnum.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.lionzxy.fastlogblock.io.filesplitter; - -public enum FileSplitterEnum { - SINGLE, - BLOCKHASH; - -} diff --git a/src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/FileSplitterManager.java b/src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/FileSplitterManager.java deleted file mode 100644 index 6d2c998..0000000 --- a/src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/FileSplitterManager.java +++ /dev/null @@ -1,4 +0,0 @@ -package ru.lionzxy.fastlogblock.io.filesplitter; - -public class FileSplitterManager { -} diff --git a/src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/IFileSplitter.java b/src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/IFileSplitter.java deleted file mode 100644 index cc29ac4..0000000 --- a/src/main/java/ru/lionzxy/fastlogblock/io/filesplitter/IFileSplitter.java +++ /dev/null @@ -1,18 +0,0 @@ -package ru.lionzxy.fastlogblock.io.filesplitter; - -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.io.File; - -public abstract class IFileSplitter { - protected final File modFolder; - - public IFileSplitter(final File modFolder) { - this.modFolder = modFolder; - } - - public abstract File[] getAllLogFile(); - - public abstract File getFileByPosAndWorld(BlockPos blockPos, World world); -} diff --git a/src/main/java/ru/lionzxy/fastlogblock/models/BlockChangeEventModelWithWorld.java b/src/main/java/ru/lionzxy/fastlogblock/models/BlockChangeEventModelWithWorld.java deleted file mode 100644 index 78d54f0..0000000 --- a/src/main/java/ru/lionzxy/fastlogblock/models/BlockChangeEventModelWithWorld.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.lionzxy.fastlogblock.models; - -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.sql.Timestamp; - -public class BlockChangeEventModelWithWorld extends BlockChangeEventModel { - private final World world; - - public BlockChangeEventModelWithWorld(BlockPos blockPos, String nameblock, String playernick, Timestamp timestamp, BlockChangeType blockChangeType, World world) { - super(blockPos, nameblock, playernick, timestamp, blockChangeType); - this.world = world; - } - - public World getWorld() { - return world; - } -} diff --git a/src/main/java/ru/lionzxy/fastlogblock/models/BlockChangeType.java b/src/main/java/ru/lionzxy/fastlogblock/models/BlockChangeType.java deleted file mode 100644 index a6c3747..0000000 --- a/src/main/java/ru/lionzxy/fastlogblock/models/BlockChangeType.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.lionzxy.fastlogblock.models; - -public enum BlockChangeType { - INSERT(0), - REMOVE(1), - UPDATE(2), - UNKNOWN(100); - private final byte typeId; - - BlockChangeType(final int typeid) { - this.typeId = (byte) typeid; - } - - public static BlockChangeType valueOf(final byte typeId) { - for (final BlockChangeType blockChangeType : BlockChangeType.values()) { - if (blockChangeType.getTypeId() == typeId) { - return blockChangeType; - } - } - return null; - } - - public byte getTypeId() { - return typeId; - } -} diff --git a/src/main/java/ru/lionzxy/fastlogblock/models/FindTaskResult.java b/src/main/java/ru/lionzxy/fastlogblock/models/FindTaskResult.java deleted file mode 100644 index 8a3044c..0000000 --- a/src/main/java/ru/lionzxy/fastlogblock/models/FindTaskResult.java +++ /dev/null @@ -1,24 +0,0 @@ -package ru.lionzxy.fastlogblock.models; - -import net.minecraft.entity.player.EntityPlayer; - -import java.util.List; - -public class FindTaskResult { - private final List blockChangeEventModels; - private final EntityPlayer entityPlayer; - - public FindTaskResult(List blockChangeEventModels, EntityPlayer entityPlayer) { - this.blockChangeEventModels = blockChangeEventModels; - this.entityPlayer = entityPlayer; - } - - public EntityPlayer getEntityPlayer() { - return entityPlayer; - } - - public List getBlockChangeEventModels() { - - return blockChangeEventModels; - } -} diff --git a/src/main/java/ru/lionzxy/fastlogblock/models/IFindResultListener.java b/src/main/java/ru/lionzxy/fastlogblock/models/IFindResultListener.java deleted file mode 100644 index 1455c08..0000000 --- a/src/main/java/ru/lionzxy/fastlogblock/models/IFindResultListener.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.lionzxy.fastlogblock.models; - -import jline.internal.Nullable; -import net.minecraft.entity.player.EntityPlayer; - -import java.util.List; - -public interface IFindResultListener { - void onResultAsync(List blockChangeEventModels, @Nullable EntityPlayer entityPlayer); -} diff --git a/src/main/java/ru/lionzxy/fastlogblock/utils/CollectionUtils.java b/src/main/java/ru/lionzxy/fastlogblock/utils/CollectionUtils.java deleted file mode 100644 index 6e96cb7..0000000 --- a/src/main/java/ru/lionzxy/fastlogblock/utils/CollectionUtils.java +++ /dev/null @@ -1,21 +0,0 @@ -package ru.lionzxy.fastlogblock.utils; - -import gnu.trove.map.TIntObjectMap; -import gnu.trove.map.hash.TIntObjectHashMap; -import gnu.trove.set.TIntSet; - -import java.util.function.Function; - -public class CollectionUtils { - - public static TIntObjectMap toHashMap(final TIntSet set, final Function mapper) { - final TIntObjectMap toReturn = new TIntObjectHashMap<>(); - - set.forEach((i) -> { - toReturn.put(i, mapper.apply(i)); - return true; - }); - - return toReturn; - } -} diff --git a/src/main/java/ru/lionzxy/fastlogblock/utils/Constants.java b/src/main/java/ru/lionzxy/fastlogblock/utils/Constants.java deleted file mode 100644 index 7f70713..0000000 --- a/src/main/java/ru/lionzxy/fastlogblock/utils/Constants.java +++ /dev/null @@ -1,6 +0,0 @@ -package ru.lionzxy.fastlogblock.utils; - -public class Constants { - public static final int SIZE_LOGLINE = Integer.BYTES * 4 + Long.BYTES * 2 + Byte.BYTES * 2; - public static final byte DEVIDER_SYMBOL = 28; -} diff --git a/src/main/java/ru/lionzxy/fastlogblock/utils/FileUtils.java b/src/main/java/ru/lionzxy/fastlogblock/utils/FileUtils.java deleted file mode 100644 index 990080f..0000000 --- a/src/main/java/ru/lionzxy/fastlogblock/utils/FileUtils.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.lionzxy.fastlogblock.utils; - -import java.io.File; -import java.io.IOException; - -public class FileUtils { - public static final int BYTEBUFFERSIZE = 2048; - - public static void createFileIfNotExist(final File file) throws IOException { - if (!file.exists()) { - if (file.getParentFile() != null && !file.getParentFile().exists() && !file.getParentFile().mkdirs()) { - throw new IOException("Can't create dir to file " + file.getParentFile().getAbsolutePath()); - } - if (!file.createNewFile()) { - throw new IOException("Can't create file " + file.getAbsolutePath()); - } - } - } -} diff --git a/src/test/java/ru/lionzxy/fastlogblock/io/BlockMapperAsyncTest.java b/src/test/java/club/moddedminecraft/fastlogblockserver/io/BlockMapperAsyncTest.java similarity index 96% rename from src/test/java/ru/lionzxy/fastlogblock/io/BlockMapperAsyncTest.java rename to src/test/java/club/moddedminecraft/fastlogblockserver/io/BlockMapperAsyncTest.java index f49aa4b..62f2203 100644 --- a/src/test/java/ru/lionzxy/fastlogblock/io/BlockMapperAsyncTest.java +++ b/src/test/java/club/moddedminecraft/fastlogblockserver/io/BlockMapperAsyncTest.java @@ -1,9 +1,9 @@ -package ru.lionzxy.fastlogblock.io; +package club.moddedminecraft.fastlogblockserver.io; +import club.moddedminecraft.fastlogblockserver.models.ASCIString; import com.google.testing.threadtester.*; import junit.framework.TestCase; -import ru.lionzxy.fastlogblock.io.mappers.BlockMapper; -import ru.lionzxy.fastlogblock.models.ASCIString; +import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; import java.io.IOException; import java.util.Arrays; diff --git a/src/test/java/ru/lionzxy/fastlogblock/io/BlockMapperSaveTest.java b/src/test/java/club/moddedminecraft/fastlogblockserver/io/BlockMapperSaveTest.java similarity index 94% rename from src/test/java/ru/lionzxy/fastlogblock/io/BlockMapperSaveTest.java rename to src/test/java/club/moddedminecraft/fastlogblockserver/io/BlockMapperSaveTest.java index 66de10d..382753a 100644 --- a/src/test/java/ru/lionzxy/fastlogblock/io/BlockMapperSaveTest.java +++ b/src/test/java/club/moddedminecraft/fastlogblockserver/io/BlockMapperSaveTest.java @@ -1,8 +1,8 @@ -package ru.lionzxy.fastlogblock.io; +package club.moddedminecraft.fastlogblockserver.io; +import club.moddedminecraft.fastlogblockserver.models.ASCIString; import junit.framework.TestCase; -import ru.lionzxy.fastlogblock.io.mappers.BlockMapper; -import ru.lionzxy.fastlogblock.models.ASCIString; +import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; import java.io.File; import java.io.IOException; diff --git a/src/test/java/ru/lionzxy/fastlogblock/io/LogTest.java b/src/test/java/club/moddedminecraft/fastlogblockserver/io/LogTest.java similarity index 85% rename from src/test/java/ru/lionzxy/fastlogblock/io/LogTest.java rename to src/test/java/club/moddedminecraft/fastlogblockserver/io/LogTest.java index dac875c..8ed5760 100644 --- a/src/test/java/ru/lionzxy/fastlogblock/io/LogTest.java +++ b/src/test/java/club/moddedminecraft/fastlogblockserver/io/LogTest.java @@ -1,14 +1,14 @@ -package ru.lionzxy.fastlogblock.io; +package club.moddedminecraft.fastlogblockserver.io; +import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModel; +import club.moddedminecraft.fastlogblockserver.models.BlockChangeType; import junit.framework.TestCase; import net.minecraft.util.math.BlockPos; -import ru.lionzxy.fastlogblock.models.BlockChangeType; -import ru.lionzxy.fastlogblock.io.log.LogReader; -import ru.lionzxy.fastlogblock.io.log.LogWritter; -import ru.lionzxy.fastlogblock.io.mappers.BlockMapper; -import ru.lionzxy.fastlogblock.io.mappers.NickMapper; -import ru.lionzxy.fastlogblock.models.BlockChangeEventModel; -import ru.lionzxy.fastlogblock.utils.TestUtils; +import club.moddedminecraft.fastlogblockserver.io.log.LogReader; +import club.moddedminecraft.fastlogblockserver.io.log.LogWritter; +import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; +import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; +import club.moddedminecraft.fastlogblockserver.utils.TestUtils; import java.io.File; import java.io.IOException; diff --git a/src/test/java/ru/lionzxy/fastlogblock/io/NickMapperAsyncTest.java b/src/test/java/club/moddedminecraft/fastlogblockserver/io/NickMapperAsyncTest.java similarity index 92% rename from src/test/java/ru/lionzxy/fastlogblock/io/NickMapperAsyncTest.java rename to src/test/java/club/moddedminecraft/fastlogblockserver/io/NickMapperAsyncTest.java index 0c20db5..ade4529 100644 --- a/src/test/java/ru/lionzxy/fastlogblock/io/NickMapperAsyncTest.java +++ b/src/test/java/club/moddedminecraft/fastlogblockserver/io/NickMapperAsyncTest.java @@ -1,9 +1,9 @@ -package ru.lionzxy.fastlogblock.io; +package club.moddedminecraft.fastlogblockserver.io; +import club.moddedminecraft.fastlogblockserver.models.ASCIString; import com.google.testing.threadtester.*; import junit.framework.TestCase; -import ru.lionzxy.fastlogblock.io.mappers.NickMapper; -import ru.lionzxy.fastlogblock.models.ASCIString; +import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; import java.io.IOException; import java.util.Arrays; diff --git a/src/test/java/ru/lionzxy/fastlogblock/io/NickMapperSaveTest.java b/src/test/java/club/moddedminecraft/fastlogblockserver/io/NickMapperSaveTest.java similarity index 91% rename from src/test/java/ru/lionzxy/fastlogblock/io/NickMapperSaveTest.java rename to src/test/java/club/moddedminecraft/fastlogblockserver/io/NickMapperSaveTest.java index 3d0cdfa..55a57f4 100644 --- a/src/test/java/ru/lionzxy/fastlogblock/io/NickMapperSaveTest.java +++ b/src/test/java/club/moddedminecraft/fastlogblockserver/io/NickMapperSaveTest.java @@ -1,8 +1,8 @@ -package ru.lionzxy.fastlogblock.io; +package club.moddedminecraft.fastlogblockserver.io; +import club.moddedminecraft.fastlogblockserver.models.ASCIString; import junit.framework.TestCase; -import ru.lionzxy.fastlogblock.io.mappers.NickMapper; -import ru.lionzxy.fastlogblock.models.ASCIString; +import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; import java.io.File; import java.io.IOException; diff --git a/src/test/java/ru/lionzxy/fastlogblock/io/WriteReadRunnableTest.java b/src/test/java/club/moddedminecraft/fastlogblockserver/io/WriteReadRunnableTest.java similarity index 86% rename from src/test/java/ru/lionzxy/fastlogblock/io/WriteReadRunnableTest.java rename to src/test/java/club/moddedminecraft/fastlogblockserver/io/WriteReadRunnableTest.java index e1c3cbd..c1e9fdf 100644 --- a/src/test/java/ru/lionzxy/fastlogblock/io/WriteReadRunnableTest.java +++ b/src/test/java/club/moddedminecraft/fastlogblockserver/io/WriteReadRunnableTest.java @@ -1,14 +1,14 @@ -package ru.lionzxy.fastlogblock.io; +package club.moddedminecraft.fastlogblockserver.io; +import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModelWithWorld; +import club.moddedminecraft.fastlogblockserver.models.BlockChangeType; +import club.moddedminecraft.fastlogblockserver.models.FindTask; import junit.framework.TestCase; import net.minecraft.util.math.BlockPos; -import ru.lionzxy.fastlogblock.io.filesplitter.impl.BlockHashFileSplitter; -import ru.lionzxy.fastlogblock.io.mappers.BlockMapper; -import ru.lionzxy.fastlogblock.io.mappers.NickMapper; -import ru.lionzxy.fastlogblock.models.BlockChangeEventModelWithWorld; -import ru.lionzxy.fastlogblock.models.BlockChangeType; -import ru.lionzxy.fastlogblock.models.FindTask; -import ru.lionzxy.fastlogblock.utils.TestUtils; +import club.moddedminecraft.fastlogblockserver.io.filesplitter.impl.BlockHashFileSplitter; +import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; +import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; +import club.moddedminecraft.fastlogblockserver.utils.TestUtils; import java.io.File; import java.io.IOException; diff --git a/src/test/java/ru/lionzxy/fastlogblock/utils/ASCITest.java b/src/test/java/club/moddedminecraft/fastlogblockserver/utils/ASCITest.java similarity index 75% rename from src/test/java/ru/lionzxy/fastlogblock/utils/ASCITest.java rename to src/test/java/club/moddedminecraft/fastlogblockserver/utils/ASCITest.java index eccfbc7..0c08491 100644 --- a/src/test/java/ru/lionzxy/fastlogblock/utils/ASCITest.java +++ b/src/test/java/club/moddedminecraft/fastlogblockserver/utils/ASCITest.java @@ -1,7 +1,7 @@ -package ru.lionzxy.fastlogblock.utils; +package club.moddedminecraft.fastlogblockserver.utils; +import club.moddedminecraft.fastlogblockserver.models.ASCIString; import junit.framework.TestCase; -import ru.lionzxy.fastlogblock.models.ASCIString; public class ASCITest extends TestCase { public void testEquals() { diff --git a/src/test/java/ru/lionzxy/fastlogblock/utils/TestUtils.java b/src/test/java/club/moddedminecraft/fastlogblockserver/utils/TestUtils.java similarity index 84% rename from src/test/java/ru/lionzxy/fastlogblock/utils/TestUtils.java rename to src/test/java/club/moddedminecraft/fastlogblockserver/utils/TestUtils.java index e9827e6..b6e3227 100644 --- a/src/test/java/ru/lionzxy/fastlogblock/utils/TestUtils.java +++ b/src/test/java/club/moddedminecraft/fastlogblockserver/utils/TestUtils.java @@ -1,4 +1,4 @@ -package ru.lionzxy.fastlogblock.utils; +package club.moddedminecraft.fastlogblockserver.utils; import java.io.File; From 9e24cde67a9a94f8966030fea1a1fe970f6484d2 Mon Sep 17 00:00:00 2001 From: 132ikl <132@ikl.sh> Date: Sat, 30 May 2020 00:22:04 -0400 Subject: [PATCH 3/5] Update translations, use TranslationTextHelper-like util --- .gitignore | 3 +- build.gradle | 10 +++- .../FastLogBlockServer.java | 3 +- .../fastlogblockserver/config/LogConfig.java | 4 +- .../handlers/EventHandlingManager.java | 21 ++++--- .../handlers/SplitterRunnable.java | 4 +- .../fastlogblockserver/io/ReadRunnable.java | 6 +- .../fastlogblockserver/io/WriteRunnable.java | 4 +- .../io/base/IterrateByteFile.java | 2 +- .../io/filesplitter/FileSplitterEnum.java | 2 +- .../fastlogblockserver/io/log/LogReader.java | 10 ++-- .../fastlogblockserver/io/log/LogWritter.java | 2 +- .../io/mappers/NickMapper.java | 2 +- .../fastlogblockserver/models/ASCIString.java | 3 +- .../fastlogblockserver/ui/InfoCommand.java | 28 +++++---- .../utils/TranslationUtils.java | 54 ++++++++++++++++++ .../assets/fastlogblock/lang/en_us.lang | 9 +-- .../fastlogblock/models/item/infoitem.json | 6 -- .../fastlogblock/textures/items/infoitem.png | Bin 708 -> 0 bytes src/main/resources/pack.mcmeta | 4 +- 20 files changed, 119 insertions(+), 58 deletions(-) create mode 100644 src/main/java/club/moddedminecraft/fastlogblockserver/utils/TranslationUtils.java delete mode 100644 src/main/resources/assets/fastlogblock/models/item/infoitem.json delete mode 100644 src/main/resources/assets/fastlogblock/textures/items/infoitem.png diff --git a/.gitignore b/.gitignore index 82a4bca..f4d0773 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,5 @@ build eclipse run -*.bytelog* \ No newline at end of file +*.bytelog* +logs diff --git a/build.gradle b/build.gradle index 6bdbcfb..756fd3c 100644 --- a/build.gradle +++ b/build.gradle @@ -8,6 +8,9 @@ buildscript { classpath 'net.minecraftforge.gradle:ForgeGradle:3.+' } } +repositories { + mavenCentral() +} apply plugin: 'java' apply plugin: 'jacoco' apply plugin: 'net.minecraftforge.gradle' @@ -16,7 +19,6 @@ version = "1.0.3" group = "club.moddedminecraft.fastlogblockserver" archivesBaseName = "FastLogBlockServer" -sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. compileJava { sourceCompatibility = targetCompatibility = '1.8' } @@ -33,7 +35,7 @@ configurations { dependencies { minecraft 'net.minecraftforge:forge:1.12.2-14.23.5.2854' - compile group: 'jline', name: 'jline', version: '2.14.6' + embed "jline:jline:2.14.6" embed "trove:trove:1.0.2" testCompile 'junit:junit:4.12' @@ -47,3 +49,7 @@ jacocoTestReport { html.enabled false } } + +jar { + from configurations.embed.collect { it.isDirectory() ? it : zipTree(it) } +} diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/FastLogBlockServer.java b/src/main/java/club/moddedminecraft/fastlogblockserver/FastLogBlockServer.java index 9f66722..88ac6f1 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/FastLogBlockServer.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/FastLogBlockServer.java @@ -20,6 +20,7 @@ package club.moddedminecraft.fastlogblockserver; import club.moddedminecraft.fastlogblockserver.handlers.EventHandlingManager; +import club.moddedminecraft.fastlogblockserver.ui.InfoCommand; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.FMLLog; import net.minecraftforge.fml.common.Mod; @@ -28,8 +29,6 @@ import net.minecraftforge.fml.common.event.FMLServerStartingEvent; import net.minecraftforge.fml.common.event.FMLServerStoppedEvent; -import club.moddedminecraft.fastlogblockserver.ui.InfoCommand; - import java.io.IOException; @Mod(modid = FastLogBlockServer.MODID, version = FastLogBlockServer.VERSION, updateJSON = "https://raw.githubusercontent.com/LionZXY/FastLogBlock/master/update.json", serverSideOnly = true, acceptableRemoteVersions = "*") diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/config/LogConfig.java b/src/main/java/club/moddedminecraft/fastlogblockserver/config/LogConfig.java index 008c965..d4fcd21 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/config/LogConfig.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/config/LogConfig.java @@ -20,13 +20,13 @@ package club.moddedminecraft.fastlogblockserver.config; +import club.moddedminecraft.fastlogblockserver.FastLogBlockServer; +import club.moddedminecraft.fastlogblockserver.io.filesplitter.FileSplitterEnum; import net.minecraftforge.common.config.Config; import net.minecraftforge.common.config.ConfigManager; import net.minecraftforge.fml.client.event.ConfigChangedEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import club.moddedminecraft.fastlogblockserver.FastLogBlockServer; -import club.moddedminecraft.fastlogblockserver.io.filesplitter.FileSplitterEnum; @Config(modid = FastLogBlockServer.MODID) @Config.LangKey("fastlogblock.config.title") diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/handlers/EventHandlingManager.java b/src/main/java/club/moddedminecraft/fastlogblockserver/handlers/EventHandlingManager.java index 46a7c99..b23362c 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/handlers/EventHandlingManager.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/handlers/EventHandlingManager.java @@ -19,21 +19,23 @@ package club.moddedminecraft.fastlogblockserver.handlers; +import club.moddedminecraft.fastlogblockserver.FastLogBlockServer; import club.moddedminecraft.fastlogblockserver.config.LogConfig; +import club.moddedminecraft.fastlogblockserver.io.ReadRunnable; import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModel; import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModelWithWorld; import club.moddedminecraft.fastlogblockserver.models.FindTask; import club.moddedminecraft.fastlogblockserver.models.FindTaskResult; +import club.moddedminecraft.fastlogblockserver.utils.TranslationUtils; +import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.translation.I18n; import net.minecraft.world.World; import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.fml.common.FMLLog; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; -import club.moddedminecraft.fastlogblockserver.io.ReadRunnable; import java.io.IOException; import java.text.SimpleDateFormat; @@ -78,10 +80,11 @@ public void flushUIWait(TickEvent.ServerTickEvent event) { for (BlockChangeEventModel blockEvent : findTaskResult.getBlockChangeEventModels()) { notifyAboutEvent(blockEvent, findTaskResult.getEntityPlayer()); } + EntityPlayer sender = findTaskResult.getEntityPlayer(); if (findTaskResult.getBlockChangeEventModels().isEmpty()) { - findTaskResult.getEntityPlayer().sendMessage(new TextComponentString("§3[FastLogBlock]§f Not found changes with block")); + sender.sendMessage(TranslationUtils.createComponentTranslation(sender, "message.fastlogblock:blockinfo.event.empty")); } else { - findTaskResult.getEntityPlayer().sendMessage(new TextComponentString("§3[FastLogBlock]§f Done!")); + sender.sendMessage(TranslationUtils.createComponentTranslation(sender, "message.fastlogblock:blockinfo.event.done")); } } } @@ -111,19 +114,19 @@ private void notifyAboutEvent(BlockChangeEventModel blockEvent, EntityPlayer ent } else { nickname = playerEvent.getDisplayNameString(); } + String block = entityPlayer.getEntityWorld().getBlockState(blockEvent.getBlockPos()).getBlock().getLocalizedName(); final String[] args = new String[]{new SimpleDateFormat(dateformat).format(new Date(blockEvent.getTimestamp().getTime())), nickname, - blockEvent.getNameblock().toString()}; - TextComponentString textComponent; + block + }; switch (blockEvent.getBlockChangeType()) { default: case INSERT: - textComponent = new TextComponentString("§2[+]§6["+args[0]+"§6]§f "+args[1]+": "+args[2]); + entityPlayer.sendMessage(TranslationUtils.createComponentTranslation(entityPlayer, "message.fastlogblock:blockinfo.event.insert", (Object []) args)); break; case REMOVE: - textComponent = new TextComponentString("§4[-]§6["+args[0]+"§6]§f "+args[1]+": "+args[2]); + entityPlayer.sendMessage(TranslationUtils.createComponentTranslation(entityPlayer, "message.fastlogblock:blockinfo.event.remove", (Object []) args)); } - entityPlayer.sendMessage(textComponent); } diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/handlers/SplitterRunnable.java b/src/main/java/club/moddedminecraft/fastlogblockserver/handlers/SplitterRunnable.java index 5c94c0a..d6c7bc7 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/handlers/SplitterRunnable.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/handlers/SplitterRunnable.java @@ -20,8 +20,6 @@ package club.moddedminecraft.fastlogblockserver.handlers; import club.moddedminecraft.fastlogblockserver.config.LogConfig; -import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModelWithWorld; -import net.minecraftforge.fml.common.FMLLog; import club.moddedminecraft.fastlogblockserver.io.ReadRunnable; import club.moddedminecraft.fastlogblockserver.io.WriteRunnable; import club.moddedminecraft.fastlogblockserver.io.filesplitter.IFileSplitter; @@ -29,6 +27,8 @@ import club.moddedminecraft.fastlogblockserver.io.filesplitter.impl.SingleFileSplitter; import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; +import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModelWithWorld; +import net.minecraftforge.fml.common.FMLLog; import java.io.File; import java.io.IOException; diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/io/ReadRunnable.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/ReadRunnable.java index cbaff96..9ade52e 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/io/ReadRunnable.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/ReadRunnable.java @@ -19,13 +19,13 @@ package club.moddedminecraft.fastlogblockserver.io; -import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModel; -import club.moddedminecraft.fastlogblockserver.models.FindTask; -import net.minecraftforge.fml.common.FMLLog; import club.moddedminecraft.fastlogblockserver.io.filesplitter.IFileSplitter; import club.moddedminecraft.fastlogblockserver.io.log.LogReader; import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; +import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModel; +import club.moddedminecraft.fastlogblockserver.models.FindTask; +import net.minecraftforge.fml.common.FMLLog; import java.io.File; import java.util.List; diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/io/WriteRunnable.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/WriteRunnable.java index 0fe73af..478917c 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/io/WriteRunnable.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/WriteRunnable.java @@ -19,12 +19,12 @@ package club.moddedminecraft.fastlogblockserver.io; -import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModelWithWorld; -import net.minecraftforge.fml.common.FMLLog; import club.moddedminecraft.fastlogblockserver.io.filesplitter.IFileSplitter; import club.moddedminecraft.fastlogblockserver.io.log.LogWritter; import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; +import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModelWithWorld; +import net.minecraftforge.fml.common.FMLLog; import java.io.File; import java.io.IOException; diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/io/base/IterrateByteFile.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/base/IterrateByteFile.java index ebda5d4..b16bdca 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/io/base/IterrateByteFile.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/base/IterrateByteFile.java @@ -19,9 +19,9 @@ package club.moddedminecraft.fastlogblockserver.io.base; +import club.moddedminecraft.fastlogblockserver.utils.FileUtils; import gnu.trove.list.array.TByteArrayList; import net.minecraftforge.fml.common.FMLLog; -import club.moddedminecraft.fastlogblockserver.utils.FileUtils; import java.io.*; import java.nio.file.Files; diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/FileSplitterEnum.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/FileSplitterEnum.java index 3aa0585..790140d 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/FileSplitterEnum.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/filesplitter/FileSplitterEnum.java @@ -21,6 +21,6 @@ public enum FileSplitterEnum { SINGLE, - BLOCKHASH; + BLOCKHASH } diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogReader.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogReader.java index 7e57e73..f2c0c6c 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogReader.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogReader.java @@ -19,10 +19,15 @@ package club.moddedminecraft.fastlogblockserver.io.log; +import club.moddedminecraft.fastlogblockserver.io.base.IterrateByteFile; +import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; +import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; import club.moddedminecraft.fastlogblockserver.models.ASCIString; import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModel; import club.moddedminecraft.fastlogblockserver.models.BlockChangeType; import club.moddedminecraft.fastlogblockserver.models.PrepareReadBlockChangeEvent; +import club.moddedminecraft.fastlogblockserver.utils.CollectionUtils; +import club.moddedminecraft.fastlogblockserver.utils.Constants; import gnu.trove.list.array.TByteArrayList; import gnu.trove.map.TIntObjectMap; import gnu.trove.map.TLongObjectMap; @@ -32,11 +37,6 @@ import gnu.trove.set.hash.TLongHashSet; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.common.FMLLog; -import club.moddedminecraft.fastlogblockserver.io.base.IterrateByteFile; -import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; -import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; -import club.moddedminecraft.fastlogblockserver.utils.CollectionUtils; -import club.moddedminecraft.fastlogblockserver.utils.Constants; import java.io.File; import java.io.IOException; diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogWritter.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogWritter.java index a7d0a3a..464600d 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogWritter.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/log/LogWritter.java @@ -19,9 +19,9 @@ package club.moddedminecraft.fastlogblockserver.io.log; -import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModel; import club.moddedminecraft.fastlogblockserver.io.mappers.BlockMapper; import club.moddedminecraft.fastlogblockserver.io.mappers.NickMapper; +import club.moddedminecraft.fastlogblockserver.models.BlockChangeEventModel; import club.moddedminecraft.fastlogblockserver.utils.Constants; import club.moddedminecraft.fastlogblockserver.utils.FileUtils; diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/io/mappers/NickMapper.java b/src/main/java/club/moddedminecraft/fastlogblockserver/io/mappers/NickMapper.java index 0ba99a2..4771b75 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/io/mappers/NickMapper.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/io/mappers/NickMapper.java @@ -21,11 +21,11 @@ import club.moddedminecraft.fastlogblockserver.io.base.IterrateByteFile; import club.moddedminecraft.fastlogblockserver.models.ASCIString; +import club.moddedminecraft.fastlogblockserver.utils.Constants; import com.google.common.annotations.VisibleForTesting; import gnu.trove.TIntObjectHashMap; import gnu.trove.TObjectIntHashMap; import gnu.trove.list.array.TByteArrayList; -import club.moddedminecraft.fastlogblockserver.utils.Constants; import java.io.File; import java.io.IOException; diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/models/ASCIString.java b/src/main/java/club/moddedminecraft/fastlogblockserver/models/ASCIString.java index 7d0d91b..3d9f084 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/models/ASCIString.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/models/ASCIString.java @@ -20,9 +20,10 @@ package club.moddedminecraft.fastlogblockserver.models; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; public class ASCIString implements CharSequence { - private final static Charset ASCI = Charset.forName("ASCII"); + private final static Charset ASCI = StandardCharsets.US_ASCII; private final byte[] shortString; private int hashcode = -1; diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/ui/InfoCommand.java b/src/main/java/club/moddedminecraft/fastlogblockserver/ui/InfoCommand.java index 0f5c5c9..0861902 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/ui/InfoCommand.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/ui/InfoCommand.java @@ -20,6 +20,7 @@ package club.moddedminecraft.fastlogblockserver.ui; import club.moddedminecraft.fastlogblockserver.handlers.EventHandlingManager; +import club.moddedminecraft.fastlogblockserver.utils.TranslationUtils; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; @@ -27,7 +28,6 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; -import net.minecraft.util.text.TextComponentString; public class InfoCommand extends CommandBase { @@ -38,29 +38,35 @@ public InfoCommand(EventHandlingManager eventHandlingManager) { } @Override - public String getName() { return "blocklog"; } + public String getName() { + return "blocklog"; + } @Override - public String getUsage(ICommandSender sender) { return "/blocklog"; } + public String getUsage(ICommandSender sender) { + return "/blocklog"; + } @Override - public int getRequiredPermissionLevel() { return 4; } + public int getRequiredPermissionLevel() { + return 4; + } + @Override public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException { if (sender instanceof EntityPlayer) { RayTraceResult lookingAt = rayTrace(8, sender); - sender.sendMessage(new TextComponentString("§3[FastLogBlock]§f Start computing log for Position " + lookingAt.getBlockPos().getX() + lookingAt.getBlockPos().getY() + lookingAt.getBlockPos().getZ())); - eventHandlingManager.handleLogByPos(((EntityPlayer)sender), lookingAt.getBlockPos(), ((EntityPlayer)sender).world); + sender.sendMessage(TranslationUtils.createComponentTranslation(sender, "message.fastlogblock:blockinfo.start", lookingAt.getBlockPos().getX(), lookingAt.getBlockPos().getY(), lookingAt.getBlockPos().getZ())); + eventHandlingManager.handleLogByPos(((EntityPlayer) sender), lookingAt.getBlockPos(), ((EntityPlayer) sender).world); } } - public RayTraceResult rayTrace(double blockReachDistance, ICommandSender sender) - { - Vec3d vec3d = ((EntityPlayer)sender).getPositionEyes(1.0f); - Vec3d vec3d1 = ((EntityPlayer)sender).getLook(1.0f); + public RayTraceResult rayTrace(double blockReachDistance, ICommandSender sender) { + Vec3d vec3d = ((EntityPlayer) sender).getPositionEyes(1.0f); + Vec3d vec3d1 = ((EntityPlayer) sender).getLook(1.0f); Vec3d vec3d2 = vec3d.addVector(vec3d1.x * blockReachDistance, vec3d1.y * blockReachDistance, vec3d1.z * blockReachDistance); - return ((EntityPlayer)sender).world.rayTraceBlocks(vec3d, vec3d2, false, false, true); + return ((EntityPlayer) sender).world.rayTraceBlocks(vec3d, vec3d2, false, false, true); } } \ No newline at end of file diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/utils/TranslationUtils.java b/src/main/java/club/moddedminecraft/fastlogblockserver/utils/TranslationUtils.java new file mode 100644 index 0000000..ec5e0c2 --- /dev/null +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/utils/TranslationUtils.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2020 LionZXY + * Copyright (c) 2020 132ikl + * This file is part of FastLogBlockServer. + * + * FastLogBlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FastLogBlockServer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FastLogBlockServer. If not, see . + */ + +package club.moddedminecraft.fastlogblockserver.utils; + +import io.netty.channel.Channel; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.network.NetworkManager; +import net.minecraft.util.text.TextComponentBase; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.translation.I18n; +import net.minecraftforge.fml.common.network.NetworkRegistry; + +public class TranslationUtils { + private TranslationUtils() { + } + + public static TextComponentBase createComponentTranslation(ICommandSender sender, String translation, Object... args) { + return isVanillaClient(sender) ? new TextComponentString(I18n.translateToLocalFormatted(translation, args)) : new TextComponentTranslation(translation, args); + } + + private static boolean isVanillaClient(ICommandSender sender) { + if (sender instanceof EntityPlayerMP) { + EntityPlayerMP playerMP = (EntityPlayerMP) sender; + NetHandlerPlayServer connection = playerMP.connection; + if (connection != null) { + NetworkManager netManager = connection.netManager; + Channel channel = netManager.channel(); + return !channel.attr(NetworkRegistry.FML_MARKER).get(); + } + } + + return false; + } +} diff --git a/src/main/resources/assets/fastlogblock/lang/en_us.lang b/src/main/resources/assets/fastlogblock/lang/en_us.lang index fdbad01..e5202af 100644 --- a/src/main/resources/assets/fastlogblock/lang/en_us.lang +++ b/src/main/resources/assets/fastlogblock/lang/en_us.lang @@ -1,9 +1,6 @@ -message.fastlogblock:blockinfo.start=§3[FastLogBlock]§f Start computing log for Position[x=%d, y=%d, z=%d] +message.fastlogblock:blockinfo.start=§3[FastLogBlock]§f Computing log for position %d %d %d... message.fastlogblock:blockinfo.event.insert=§2[+]§6[%s§6]§f %s: %s message.fastlogblock:blockinfo.event.remove=§4[-]§6[%s§6]§f %s: %s message.fastlogblock:blockinfo.event.done=§3[FastLogBlock]§f Done! -message.fastlogblock:blockinfo.event.empty=§3[FastLogBlock]§f Not found changes with block -message.fastlogblock:blockinfo.event.permissionerror=§3[FastLogBlock]§4 Permission error. You can't use this mod (with current settings this mod can use only Server Admin) -message.fastlogblock:blockinfo.event.dateformat=dd/MM/yyyy HH:mm:ss - -item.fastlogblock:infoitem.name=FastBlockLog Info Item \ No newline at end of file +message.fastlogblock:blockinfo.event.empty=§3[FastLogBlock]§f No changes found for block +message.fastlogblock:blockinfo.event.dateformat='§9'yyyy-MM-dd' §c'HH:mm z'§6' diff --git a/src/main/resources/assets/fastlogblock/models/item/infoitem.json b/src/main/resources/assets/fastlogblock/models/item/infoitem.json deleted file mode 100644 index f0acec5..0000000 --- a/src/main/resources/assets/fastlogblock/models/item/infoitem.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "fastlogblock:items/infoitem" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/fastlogblock/textures/items/infoitem.png b/src/main/resources/assets/fastlogblock/textures/items/infoitem.png deleted file mode 100644 index b728a9b2ac600761b9c08995efd8332fe2084e79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 708 zcmV;#0z3VQP)1^8n{Mu^W9ko^e`Tk0N&Z0MRWbWJqXS99^$5oV|3Xu6JDtz_O> z#LQdF&%}`Z2~x={RuLM!o>HJ>=$cTS3TkBqy32{`RQR;A&dEzU$yk(BGK(`-$NE+h z*fFPac>t1`95&Udbhs4mJ1JDVkC;gXnJW;YL>* zXHT7`v-c)G-Gd}aEPYwUChwg6^YRiMZMRDc+*4&k*F=NYLs$PT0zp4^I~4MQsdqCx zd(q3!h)HF(reqv^{!(gfZ7r{FOVAME$pJAr@kES`^^0bsR0000 Date: Sat, 30 May 2020 00:25:08 -0400 Subject: [PATCH 4/5] Bump to version 1.1.0 --- .../fastlogblockserver/FastLogBlockServer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/club/moddedminecraft/fastlogblockserver/FastLogBlockServer.java b/src/main/java/club/moddedminecraft/fastlogblockserver/FastLogBlockServer.java index 88ac6f1..cbf90d3 100644 --- a/src/main/java/club/moddedminecraft/fastlogblockserver/FastLogBlockServer.java +++ b/src/main/java/club/moddedminecraft/fastlogblockserver/FastLogBlockServer.java @@ -33,8 +33,8 @@ @Mod(modid = FastLogBlockServer.MODID, version = FastLogBlockServer.VERSION, updateJSON = "https://raw.githubusercontent.com/LionZXY/FastLogBlock/master/update.json", serverSideOnly = true, acceptableRemoteVersions = "*") public class FastLogBlockServer { - public static final String MODID = "fastlogblock"; - public static final String VERSION = "1.0.2"; + public static final String MODID = "fastlogblockserver"; + public static final String VERSION = "1.1.0"; private EventHandlingManager eventHandlingManager; @EventHandler From fad26fb69ef7efa40ddfdb07599f50e0f47ff1cd Mon Sep 17 00:00:00 2001 From: 132ikl <132@ikl.sh> Date: Sat, 30 May 2020 00:27:51 -0400 Subject: [PATCH 5/5] Temporarily disable CI tests --- .travis.yml => .travis.yml-disabled | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .travis.yml => .travis.yml-disabled (100%) diff --git a/.travis.yml b/.travis.yml-disabled similarity index 100% rename from .travis.yml rename to .travis.yml-disabled