Ver. 1.0.0

This commit is contained in:
Andrew 2021-06-03 13:34:56 +07:00
commit 2ec001e8d0
9 changed files with 452 additions and 0 deletions

118
.gitignore vendored Normal file
View file

@ -0,0 +1,118 @@
# User-specific stuff
.idea/
*.iml
*.ipr
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
.gradle
build/
# Ignore Gradle GUI config
gradle-app.setting
# Cache of project
.gradletasknamecache
**/build/
# Common working directory
run/
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar

150
build.gradle Normal file
View file

@ -0,0 +1,150 @@
buildscript {
repositories {
maven { url = 'https://maven.minecraftforge.net' }
mavenCentral()
}
dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '4.1.+', changing: true
}
}
repositories {
maven { url = "https://repo.refinedmods.com" }
maven {
url "https://www.cursemaven.com"
content {
includeGroup "curse.maven"
}
}
}
apply plugin: 'net.minecraftforge.gradle'
group = 'xyz.nuark'
version = '1.0.0'
archivesBaseName = 'rdmover'
java.toolchain.languageVersion = JavaLanguageVersion.of(8) // Mojang ships Java 8 to end users, so your mod should target Java 8.
minecraft {
// The mappings can be changed at any time, and must be in the following format.
// Channel: Version:
// snapshot YYYYMMDD Snapshot are built nightly.
// stable # Stables are built at the discretion of the MCP team.
// official MCVersion Official field/method names from Mojang mapping files
//
// You must be aware of the Mojang license when using the 'official' mappings.
// See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md
//
// 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 channel: 'snapshot', version: '20210309-1.16.5'
// makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
// Default run configurations.
// These can be tweaked, removed, or duplicated as needed.
runs {
client {
workingDirectory project.file('run')
// Recommended logging data for a userdev environment
// The markers can be changed as needed.
// "SCAN": For mods scan.
// "REGISTRIES": For firing of registry events.
// "REGISTRYDUMP": For getting the contents of all registries.
property 'forge.logging.markers', 'REGISTRIES'
// Recommended logging level for the console
// You can set various levels here.
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
property 'forge.logging.console.level', 'debug'
mods {
rdmover {
source sourceSets.main
}
}
}
server {
workingDirectory project.file('run')
// Recommended logging data for a userdev environment
// The markers can be changed as needed.
// "SCAN": For mods scan.
// "REGISTRIES": For firing of registry events.
// "REGISTRYDUMP": For getting the contents of all registries.
property 'forge.logging.markers', 'REGISTRIES'
// Recommended logging level for the console
// You can set various levels here.
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
property 'forge.logging.console.level', 'debug'
mods {
rdmover {
source sourceSets.main
}
}
}
data {
workingDirectory project.file('run')
// Recommended logging data for a userdev environment
// The markers can be changed as needed.
// "SCAN": For mods scan.
// "REGISTRIES": For firing of registry events.
// "REGISTRYDUMP": For getting the contents of all registries.
property 'forge.logging.markers', 'REGISTRIES'
// Recommended logging level for the console
// You can set various levels here.
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
property 'forge.logging.console.level', 'debug'
// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
args '--mod', 'rdmover', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
mods {
rdmover {
source sourceSets.main
}
}
}
}
}
// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }
dependencies {
minecraft 'net.minecraftforge:forge:1.16.5-36.1.24'
def rs_version = "1.9.13+158"
implementation fg.deobf("com.refinedmods:refinedstorage:$rs_version")
implementation fg.deobf("curse.maven:storage-drawers-223852:3180569")
compileOnly fileTree(dir: 'lib', include: ['*.jar'])
runtimeOnly fileTree(dir: 'lib', include: ['*.jar'])
}
// Example for how to get properties into the manifest for reading by the runtime..
jar {
manifest {
attributes([
"Specification-Title" : "rdmover",
"Specification-Vendor" : "nuark",
"Specification-Version" : "1", // We are version 1 of ourselves
"Implementation-Title" : project.name,
"Implementation-Version" : project.version,
"Implementation-Vendor" : "nuark",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
])
}
}
jar.finalizedBy('reobfJar')

2
gradle.properties Normal file
View file

@ -0,0 +1,2 @@
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false

View file

@ -0,0 +1 @@
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.1-bin.zip

1
settings.gradle Normal file
View file

@ -0,0 +1 @@
rootProject.name = 'rdmover'

View file

@ -0,0 +1,86 @@
package xyz.nuark.rdmover;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer;
import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityDrawers;
import com.refinedmods.refinedstorage.api.storage.StorageType;
import com.refinedmods.refinedstorage.api.storage.disk.IStorageDisk;
import com.refinedmods.refinedstorage.api.storage.disk.IStorageDiskProvider;
import com.refinedmods.refinedstorage.api.util.Action;
import com.refinedmods.refinedstorage.api.util.IComparer;
import com.refinedmods.refinedstorage.apiimpl.API;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.fml.common.Mod;
import java.util.Collection;
@Mod.EventBusSubscriber
public class DriveRightClickHandler {
static final Object lock = new Object();
@SubscribeEvent(priority = EventPriority.NORMAL, receiveCanceled = true)
public static void handleDriveRightClick(final PlayerInteractEvent.RightClickBlock event) {
if (event.getSide() != LogicalSide.SERVER) {
return;
}
ItemStack handIS = event.getItemStack();
BlockPos blockPos = event.getPos();
@SuppressWarnings("rawtypes")
IStorageDisk disk = API.instance().getStorageDiskManager((ServerWorld) event.getWorld()).getByStack(handIS);
if (disk == null) {
return;
}
StorageType type = ((IStorageDiskProvider) handIS.getItem()).getType();
if (type != StorageType.ITEM) {
return;
}
@SuppressWarnings("unchecked")
IStorageDisk<ItemStack> itemDisk = (IStorageDisk<ItemStack>) disk;
Collection<ItemStack> stacks = itemDisk.getStacks();
if (stacks.isEmpty()) {
return;
}
TileEntity te = event.getWorld().getTileEntity(blockPos);
if (!(te instanceof TileEntityDrawers)) {
return;
}
synchronized (lock) {
TileEntityDrawers dte = (TileEntityDrawers) te;
boolean infiniteStorage = dte.getDrawerAttributes().isUnlimitedStorage() || dte.getDrawerAttributes().isVoid();
for (int i = 0; i < dte.getGroup().getDrawerCount(); i++) {
IDrawer drawer = dte.getGroup().getDrawer(i);
stacks.stream().filter(itemStack -> itemStack.getItem() == drawer.getStoredItemPrototype().getItem()).findFirst().ifPresent(itemStack -> {
int remainingCap = drawer.getRemainingCapacity();
int stackAmount = itemStack.getCount();
int extractAmount = infiniteStorage? stackAmount : Math.min(stackAmount, remainingCap);
ItemStack extSim = itemDisk.extract(itemStack, extractAmount, IComparer.COMPARE_NBT, Action.SIMULATE);
if (extSim.getCount() > 0) {
itemDisk.extract(itemStack, extSim.getCount(), IComparer.COMPARE_NBT, Action.PERFORM);
drawer.setStoredItemCount(drawer.getStoredItemCount() + extSim.getCount());
event.getPlayer().sendStatusMessage(new StringTextComponent(
"Put " + extSim.getCount() + " items into drawer"
), true);
}
});
}
}
}
}

View file

@ -0,0 +1,15 @@
package xyz.nuark.rdmover;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@Mod("rdmover")
public class RDMover {
private static final Logger LOGGER = LogManager.getLogger();
public RDMover() {
MinecraftForge.EVENT_BUS.register(this);
}
}

View file

@ -0,0 +1,72 @@
# This is an example mods.toml file. It contains the data relating to the loading mods.
# There are several mandatory fields (#mandatory), and many more that are optional (#optional).
# The overall format is standard TOML format, v0.5.0.
# Note that there are a couple of TOML lists in this file.
# Find more information on toml format here: https://github.com/toml-lang/toml
# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
modLoader="javafml" #mandatory
# A version range to match for said mod loader - for regular FML @Mod it will be the forge version
loaderVersion="[36,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions.
# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties.
# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here.
license="All rights reserved"
# A URL to refer people to when problems occur with this mod
#issueTrackerURL="http://my.issue.tracker/" #optional
# A list of mods - how many allowed here is determined by the individual mod loader
[[mods]] #mandatory
# The modid of the mod
modId="rdmover" #mandatory
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
# ${file.jarVersion} will substitute the value of the Implementation-Version as read from the mod's JAR file metadata
# see the associated build.gradle script for how to populate this completely automatically during a build
version="1.0.0" #mandatory
# A display name for the mod
displayName="RDMover" #mandatory
# A URL to query for updates for this mod. See the JSON update specification <here>
#updateJSONURL="http://myurl.me/" #optional
# A URL for the "homepage" for this mod, displayed in the mod UI
#displayURL="http://example.com/" #optional
# A file name (in the root of the mod JAR) containing a logo for display
#logoFile="rdmover.png" #optional
# A text field displayed in the mod UI
#credits="Thanks for this example mod goes to Java" #optional
# A text field displayed in the mod UI
authors="nuark" #optional
# The description text for the mod (multi line!) (#mandatory)
description='''
RDMover - easilly move items from RefinedStorage drives to StorageDrawers drawers
'''
# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional.
[[dependencies.rdmover]] #optional
# the modid of the dependency
modId="forge" #mandatory
# Does this dependency have to exist - if not, ordering below must be specified
mandatory=true #mandatory
# The version range of the dependency
versionRange="[36,)" #mandatory
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
ordering="NONE"
# Side this dependency is applied on - BOTH, CLIENT or SERVER
side="BOTH"
# Here's another dependency
[[dependencies.rdmover]]
modId="minecraft"
mandatory=true
# This version range declares a minimum of the current minecraft version up to but not including the next major version
versionRange="[1.16.5,1.17)"
ordering="NONE"
side="BOTH"
# Here's another dependency
[[dependencies.rdmover]]
modId="refinedstorage"
mandatory=true
versionRange="[1.9.13,)"
ordering="NONE"
side="BOTH"
# Here's another dependency
[[dependencies.rdmover]]
modId="storagedrawers"
mandatory=true
versionRange="[8.2.2,)"
ordering="NONE"
side="BOTH"

View file

@ -0,0 +1,7 @@
{
"pack": {
"description": "rdmover resources",
"pack_format": 6,
"_comment": "A pack_format of 6 requires json lang files and some texture changes from 1.16.2. Note: we require v6 pack meta for all mods."
}
}