7 Commits

Author SHA1 Message Date
DaCodia
dd9acfcb94 mango deserves the death penalty istg 2024-08-07 23:39:18 -05:00
DaCodia
e6c8effe4c 50 errors and I fixed mixins and entities 2024-08-07 13:00:49 -05:00
DaCodia
f957e697d9 51 left YIPEE 2024-08-06 23:57:00 -05:00
DaCodia
f6031652c2 132 YIPEE 2024-08-06 23:02:05 -05:00
DaCodia
b508cfef9f ONLY 963 ERRORS LEFT 2024-08-06 18:44:54 -05:00
DaCodia
756d8cd137 15048 errors 👍 2024-07-25 21:22:57 -07:00
DaCodia
c74c4937e2 gradle works 2024-07-25 05:24:57 -05:00
155 changed files with 1526 additions and 3250 deletions

View File

@@ -1,187 +1,85 @@
buildscript {
repositories {
// These repositories are only for Gradle plugins, put any other repositories in the repository block further below
maven { url = 'https://maven.minecraftforge.net' }
mavenCentral()
jcenter()
maven { url = 'https://maven.parchmentmc.org' }
maven { url = 'https://repo.spongepowered.org/repository/maven-public' }
}
dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true
classpath "org.parchmentmc:librarian:${librarian_version}"
classpath "org.spongepowered:mixingradle:0.7-SNAPSHOT"
}
}
// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
plugins {
id 'eclipse'
id 'fabric-loom' version "1.5-SNAPSHOT"
id 'maven-publish'
id 'com.matthewprenger.cursegradle' version '1.4.0'
}
apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'org.parchmentmc.librarian.forgegradle'
apply plugin: 'org.spongepowered.mixin'
//mixin {
// add sourceSets.main, "createindustry.refmap.json"
//}
version = '0.9.0c-1.19.2'
version = '0.9.0c-1.19.2-fabric'
group = 'com.drmangotea.createindustry' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'createindustry'
// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17.
java.toolchain.languageVersion = JavaLanguageVersion.of(17)
println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}"
minecraft {
mappings channel: 'parchment', version: "${parchment_version}-${minecraft_version}"
// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Currently, this location cannot be changed from the default.
runs {
client {
workingDirectory project.file('run')
arg '-mixin.config=createindustry.mixins.json'
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
property 'forge.enabledGameTestNamespaces', 'createindustry'
property 'mixin.env.remapRefMap', 'true'
property 'mixin.env.refMapRemappingFile', "${buildDir}/createSrgToMcp/output.srg"
mods {
createindustry {
source sourceSets.main
}
}
}
server {
workingDirectory project.file('run')
arg '-mixin.config=createindustry.mixins.json'
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
property 'forge.enabledGameTestNamespaces', 'createindustry'
property 'mixin.env.remapRefMap', 'true'
property 'mixin.env.refMapRemappingFile', "${buildDir}/createSrgToMcp/output.srg"
mods {
createindustry {
source sourceSets.main
}
}
}
gameTestServer {
workingDirectory project.file('run')
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
property 'forge.enabledGameTestNamespaces', 'createindustry'
property 'mixin.env.remapRefMap', 'true'
property 'mixin.env.refMapRemappingFile', "${buildDir}/createSrgToMcp/output.srg"
mods {
createindustry {
source sourceSets.main
}
}
}
data {
workingDirectory project.file('run')
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
args '--mod', 'createindustry', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
mods {
createindustry {
source sourceSets.main
}
}
}
}
}
// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
repositories {
maven {
url = 'https://www.cursemaven.com'
content {
includeGroup "curse.maven"
}
}
maven {
// location of the maven that hosts JEI files since January 2023
// location of the maven for Vazkii's mods
name = "Jared's maven"
url = "https://maven.blamejared.com/"
}
maven {
url "https://maven.tterrag.com/"
}
maven { url = "https://maven.shedaniel.me/" } // Cloth Config, REI
maven { url = "https://maven.blamejared.com/" } // JEI
maven { url = "https://maven.parchmentmc.org" } // Parchment mappings
maven { url = "https://maven.quiltmc.org/repository/release" } // Quilt Mappings
maven { url = "https://api.modrinth.com/maven" } // LazyDFU
maven { url = "https://maven.terraformersmc.com/releases/" } // Mod Menu
maven { url = "https://mvn.devos.one/snapshots/" } // Create, Porting Lib, Forge Tags, Milk Lib, Registrate
maven { url = "https://raw.githubusercontent.com/Fuzss/modresources/main/maven/" } // Forge Config API Port
maven { url = "https://maven.jamieswhiteshirt.com/libs-release" } // Reach Entity Attributes
maven { url = "https://jitpack.io/" } // Mixin Extras, Fabric ASM
maven { url = "https://maven.tterrag.com/" } // Flywheel
maven { url = 'https://ladysnake.jfrog.io/artifactory/mods' } // I FUCKING HATE CAPABILITERS
}
dependencies {
minecraft("com.mojang:minecraft:${minecraft_version}")
mappings(loom.layered {
it.mappings("org.quiltmc:quilt-mappings:$minecraft_version+build.$quilt_version:intermediary-v2")
it.parchment("org.parchmentmc.data:parchment-$minecraft_version:$parchment_version@zip")
it.officialMojangMappings { nameSyntheticMembers = false }
})
modImplementation("net.fabricmc:fabric-loader:${fabric_loader_version}")
// dependencies
modImplementation("net.fabricmc.fabric-api:fabric-api:${fabric_api_version}")
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
// Create - dependencies are added transitively
modImplementation("com.simibubi.create:create-fabric-${minecraft_version}:${create_version}")
//JEI
compileOnly("mezz.jei:jei-${minecraft_version}-fabric-api:${jei_version}")
runtimeOnly(compileOnly("mezz.jei:jei-${minecraft_version}-fabric:${jei_version}"))
compileOnly fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}")
implementation fg.deobf("com.jozufozu.flywheel:flywheel-forge-${minecraft_version}:${flywheel_version}")
implementation fg.deobf("com.simibubi.create:create-${minecraft_version}:${create_version}:all") { transitive = false }
implementation fg.deobf("curse.maven:createaddition-439890:5070245")
implementation fg.deobf("curse.maven:zinclib-968773:5110339")
implementation fg.deobf("curse.maven:mekanism-268560:4644795")
implementation fg.deobf("curse.maven:selene-499980:4983974")
implementation fg.deobf("curse.maven:spark-361579:4505309")
//implementation fg.deobf("curse.maven:create-steam-n-rails-688231:5246888")
compileOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}-common-api:${jei_version}")
compileOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}-forge-api:${jei_version}")
runtimeOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}-forge:${jei_version}")
annotationProcessor "org.spongepowered:mixin:0.8.5:processor"
testAnnotationProcessor "org.spongepowered:mixin:0.8.5:processor"
// Development QOL
modLocalRuntime("maven.modrinth:lazydfu:${lazydfu_version}")
modLocalRuntime("com.terraformersmc:modmenu:${modmenu_version}")
}
// Example for how to get properties into the manifest for reading at runtime.
jar {
manifest {
attributes([
"Specification-Title" : "createindustry",
"Specification-Vendor" : "tfmgsareus",
"Specification-Version" : "1", // We are version 1 of ourselves
"Implementation-Title" : project.name,
"Implementation-Version" : project.jar.archiveVersion,
"Implementation-Vendor" : "tfmgsareus",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
"MixinConfigs": "createindustry.mixins.json"
])
processResources {
// require dependencies to be the version compiled against or newer
// Map<String, String> properties = Map.of(
// "version", version,
// "fabric_loader_version", fabric_loader_version,
// "fabric_api_version", fabric_api_version,
// "create_version", create_version,
// "minecraft_version", minecraft_version
// )
inputs.properties(properties)
filesMatching("fabric.mod.json") {
expand properties
}
}
tasks.withType(JavaCompile).configureEach {
it.options.release = Integer.parseInt(sourceCompatibility)
}
jar.finalizedBy('reobfJar')
java {
withSourcesJar()
}
jar {
from("LICENSE") {
rename { "${it}_${project.archivesBaseName}" }
}
}
publishing {
publications {
mavenJava(MavenPublication) {
@@ -195,6 +93,32 @@ publishing {
}
}
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
loom {
runs {
data {
environment = "data"
defaultMainClass = 'com.drmangotea.createindustry.CreateTFMG.java'
//property 'forge.logging.markers', 'REGISTRIES'
//property 'forge.logging.console.level', 'debug'
programArgs '--mod', 'createindustry', '--all', '--output', 'src/generated/resources/', '--existing', 'src/main/resources/'
}
// mixin {
// defaultRefmapName = 'mixins.createindustry.refmap.json'
// useRefmap = true
// remap = true
// }
}
}
//minecraft {
//
//
// // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Currently, this location cannot be changed from the default.
//
//}
//
//// Include resources generated by data generators.
//sourceSets.main.resources { srcDir 'src/generated/resources' }

View File

@@ -1,14 +1,16 @@
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false
jei_minecraft_version = 1.19.2
jei_version = 11.4.0.274
forge_version = 43.2.8
jei_version = 11.6.0.1024
fabric_loader_version = 0.15.7
fabric_api_version = 0.92.0+1.20.1
minecraft_version = 1.19.2
flywheel_version = 0.6.10-20
create_version = 0.5.1.f-45
librarian_version = 1.+
create_version = 0.5.1-f-build.1334+mc1.19.2
quilt_version = 22
parchment_version = 2022.11.27
registrate_version = MC1.19-1.1.5
registrate_version = MC1.19-1.1.5
modmenu_version = 4.2.0-beta.2
lazydfu_version = 0.1.3

Binary file not shown.

View File

@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

35
gradlew vendored
View File

@@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,13 +80,11 @@ do
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -133,22 +131,29 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -193,11 +198,15 @@ if "$cygwin" || "$msys" ; then
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \

1
gradlew.bat vendored
View File

@@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

View File

@@ -1,9 +1,9 @@
pluginManagement {
repositories {
mavenCentral()
gradlePluginPortal()
maven { url = 'https://maven.minecraftforge.net/' }
maven { url = "https://maven.fabricmc.net/" }
maven { url = "https://maven.quiltmc.org/repository/release" }
}
}

View File

@@ -1,49 +1,26 @@
package com.drmangotea.createindustry;
import com.drmangotea.createindustry.registry.TFMGContraptions;
import com.drmangotea.createindustry.base.TFMGLangPartials;
import com.drmangotea.createindustry.config.TFMGConfigs;
import com.drmangotea.createindustry.items.weapons.explosives.thermite_grenades.fire.TFMGColoredFires;
import com.drmangotea.createindustry.registry.*;
import com.drmangotea.createindustry.worldgen.TFMGConfiguredFeatures;
import com.drmangotea.createindustry.worldgen.TFMGFeatures;
import com.drmangotea.createindustry.worldgen.TFMGOreConfigEntries;
import com.mojang.logging.LogUtils;
import com.simibubi.create.AllParticleTypes;
import com.simibubi.create.content.processing.burner.BlazeBurnerBlock;
import com.simibubi.create.foundation.data.CreateRegistrate;
import com.simibubi.create.foundation.data.LangMerger;
import com.simibubi.create.foundation.item.ItemDescription;
import com.simibubi.create.foundation.item.KineticStats;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.item.TooltipModifier;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.Holder;
import net.minecraft.data.DataGenerator;
import net.fabricmc.api.ModInitializer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.data.event.GatherDataEvent;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.event.server.ServerStartingEvent;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.slf4j.Logger;
import static com.simibubi.create.content.fluids.tank.BoilerHeaters.registerHeater;
@Mod(CreateTFMG.MOD_ID)
public class CreateTFMG
{
public class CreateTFMG implements ModInitializer {
public static final String MOD_ID = "createindustry";
public static final String NAME = "Create: The Factory Must Grow";
@@ -51,23 +28,15 @@ public class CreateTFMG
public static final Logger LOGGER = LogUtils.getLogger();
static {
REGISTRATE.setTooltipModifierFactory(item -> {
return new ItemDescription.Modifier(item, TooltipHelper.Palette.STANDARD_CREATE)
.andThen(TooltipModifier.mapNull(KineticStats.create(item)));
});
REGISTRATE.setTooltipModifierFactory(item ->
new ItemDescription.Modifier(item, TooltipHelper.Palette.STANDARD_CREATE)
.andThen(TooltipModifier.mapNull(KineticStats.create(item))));
}
public CreateTFMG()
{
@Override
public void onInitialize() {
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
REGISTRATE.registerEventListeners(FMLJavaModLoadingContext.get().getModEventBus());
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::commonSetup);
//
REGISTRATE.register();
TFMGBlocks.register();
TFMGItems.register();
@@ -80,32 +49,28 @@ public class CreateTFMG
TFMGSoundEvents.prepare();
TFMGContraptions.prepare();
TFMGOreConfigEntries.init();
TFMGParticleTypes.register(modEventBus);
TFMGMobEffects.register(modEventBus);
TFMGPotions.register(modEventBus);
TFMGParticleTypes.register();
TFMGMobEffects.register();
TFMGPotions.register();
TFMGPackets.registerPackets();
TFMGColoredFires.register(modEventBus);
TFMGFeatures.register(modEventBus);
TFMGRecipeTypes.register(modEventBus);
TFMGColoredFires.register();
TFMGFeatures.register();
TFMGRecipeTypes.register();
TFMGConfigs.register(ModLoadingContext.get());
TFMGConfigs.register();
//
modEventBus.addListener(CreateTFMG::init);
MinecraftForge.EVENT_BUS.register(this);
modEventBus.addListener(EventPriority.LOWEST, CreateTFMG::gatherData);
modEventBus.addListener(TFMGSoundEvents::register);
DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> CreateTFMGClient::new);
modEventBus.addListener(this::clientSetup);
CreateTFMG.init();
//modEventBus.addListener(EventPriority.LOWEST, CreateTFMG::gatherData); CreateTFMGData gaming
TFMGSoundEvents.register();
}
public static void init(final FMLCommonSetupEvent event) {
public static void init() {
TFMGFluids.registerFluidInteractions();
event.enqueueWork(() -> {
//event.enqueueWork(() -> {
registerHeater(TFMGBlocks.FIREBOX.get(), (level, pos, state) -> {
BlazeBurnerBlock.HeatLevel value = state.getValue(BlazeBurnerBlock.HEAT_LEVEL);
@@ -121,30 +86,12 @@ public class CreateTFMG
return -1;
});
});
//});
}
@SuppressWarnings("removal")
public static void gatherData(GatherDataEvent event) {
DataGenerator gen = event.getGenerator();
gen.addProvider(true, new LangMerger(gen, MOD_ID, NAME, TFMGLangPartials.values()));
}
@SuppressWarnings("removal")
private void clientSetup(final FMLClientSetupEvent event) {
ItemBlockRenderTypes.setRenderLayer(TFMGColoredFires.GREEN_FIRE.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(TFMGColoredFires.BLUE_FIRE.get(), RenderType.cutout());
}
private void commonSetup(final FMLCommonSetupEvent event) {
event.enqueueWork(() -> {
final Holder<PlacedFeature> initializeOil = TFMGConfiguredFeatures.OIL_PLACED;
final Holder<PlacedFeature> initializeSimulatedOil = TFMGConfiguredFeatures.OIL_DEPOSIT_PLACED;
});
}
@SubscribeEvent
public void onServerStarting(ServerStartingEvent event)
{
LOGGER.info("YEEEHAAW");
}
public static ResourceLocation asResource(String path) {
return new ResourceLocation(MOD_ID, path);

View File

@@ -7,42 +7,40 @@ import com.drmangotea.createindustry.items.weapons.quad_potato_cannon.QuadPotato
import com.drmangotea.createindustry.ponder.TFMGPonderIndex;
import com.drmangotea.createindustry.registry.TFMGPartialModels;
import com.drmangotea.createindustry.registry.TFMGParticleTypes;
import com.simibubi.create.AllParticleTypes;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import io.github.fabricators_of_create.porting_lib.event.client.ParticleManagerRegistrationCallback;
import net.fabricmc.api.ClientModInitializer;
public class CreateTFMGClient {
public class CreateTFMGClient implements ClientModInitializer {
public static final QuadPotatoCannonRenderHandler QUAD_POTATO_CANNON_RENDER_HANDLER = new QuadPotatoCannonRenderHandler();
public static final AdvancedPotatoCannonRenderHandler ADVANCED_POTATO_CANNON_RENDER_HANDLER = new AdvancedPotatoCannonRenderHandler();
public static final FlamethrowerRenderHandler FLAMETHROWER_RENDER_HANDLER = new FlamethrowerRenderHandler();
public CreateTFMGClient() {
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
IEventBus forgeEventBus = MinecraftForge.EVENT_BUS;
@Override
public void onInitializeClient() {
TFMGPartialModels.init();
modEventBus.addListener(TFMGParticleTypes::registerFactories);
modEventBus.register(this);
ADVANCED_POTATO_CANNON_RENDER_HANDLER.registerListeners();
QUAD_POTATO_CANNON_RENDER_HANDLER.registerListeners();
FLAMETHROWER_RENDER_HANDLER.registerListeners();
// ItemBlockRenderTypes.setRenderLayer(TFMGColoredFires.GREEN_FIRE.get(), RenderType.cutout());
// ItemBlockRenderTypes.setRenderLayer(TFMGColoredFires.BLUE_FIRE.get(), RenderType.cutout());
ADVANCED_POTATO_CANNON_RENDER_HANDLER.registerListeners(forgeEventBus);
QUAD_POTATO_CANNON_RENDER_HANDLER.registerListeners(forgeEventBus);
FLAMETHROWER_RENDER_HANDLER.registerListeners(forgeEventBus);
}
@SubscribeEvent
public void setup(final FMLClientSetupEvent event) {
TFMGPonderIndex.register();
TFMGPonderIndex.registerTags();
ParticleManagerRegistrationCallback.EVENT.register(TFMGParticleTypes::registerFactories);
initCompat();
}
@SuppressWarnings("Convert2MethodRef") // may cause class loading issues if changed
private static void initCompat() {
//used for client related compat
//example: Mods.<YOUR MOD>.executeIfInstalled(() -> () -> <Compat Class>.<clientInit or init>());
}
}

View File

@@ -3,18 +3,17 @@ package com.drmangotea.createindustry.base;
import com.tterrag.registrate.AbstractRegistrate;
import com.tterrag.registrate.builders.BuilderCallback;
import com.tterrag.registrate.builders.FluidBuilder;
import com.tterrag.registrate.fabric.SimpleFlowableFluid;
import com.tterrag.registrate.util.nullness.NonNullFunction;
import com.tterrag.registrate.util.nullness.NonNullSupplier;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.fluids.ForgeFlowingFluid;
import net.minecraftforge.fluids.ForgeFlowingFluid.Properties;
public class GasFluidBuilder<T extends ForgeFlowingFluid, P> extends FluidBuilder<T, P> {
public class GasFluidBuilder<T extends SimpleFlowableFluid, P> extends FluidBuilder<T, P> {
public GasFluidBuilder(AbstractRegistrate<?> owner, P parent, String name, BuilderCallback callback,
ResourceLocation stillTexture, ResourceLocation flowingTexture, FluidBuilder.FluidTypeFactory typeFactory,
NonNullFunction<Properties, T> factory) {
super(owner, parent, name, callback, stillTexture, flowingTexture, typeFactory, factory);
ResourceLocation stillTexture, ResourceLocation flowingTexture,
NonNullFunction<SimpleFlowableFluid.Properties, T> factory) {
super(owner, parent, name, callback, stillTexture, flowingTexture, factory);
source(factory);
}
@@ -23,6 +22,4 @@ public class GasFluidBuilder<T extends ForgeFlowingFluid, P> extends FluidBuilde
return this::getEntry;
}
}

View File

@@ -1,24 +1,20 @@
package com.drmangotea.createindustry.base;
import com.drmangotea.createindustry.blocks.pipes.normal.aluminum.AluminumPipeAttachmentModel;
import com.drmangotea.createindustry.blocks.pipes.normal.aluminum.AluminumPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.aluminum.EncasedAluminumPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.aluminum.GlassAluminumPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.brass.BrassPipeAttachmentModel;
import com.drmangotea.createindustry.blocks.pipes.normal.brass.BrassPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.brass.EncasedBrassPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.brass.GlassBrassPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.cast_iron.CastIronPipeAttachmentModel;
import com.drmangotea.createindustry.blocks.pipes.normal.cast_iron.CastIronPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.cast_iron.EncasedCastIronPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.cast_iron.GlassCastIronPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.plastic.EncasedPlasticPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.plastic.GlassPlasticPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.plastic.PlasticPipeAttachmentModel;
import com.drmangotea.createindustry.blocks.pipes.normal.plastic.PlasticPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.steel.EncasedSteelPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.GeneralPipeAttachmentModel;
import com.drmangotea.createindustry.blocks.pipes.normal.steel.GlassSteelPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.normal.steel.SteelPipeAttachmentModel;
import com.drmangotea.createindustry.blocks.pipes.normal.steel.SteelPipeBlock;
import com.drmangotea.createindustry.blocks.pipes.pumps.TFMGPumpBlock;
import com.drmangotea.createindustry.blocks.pipes.smart_pipes.TFMGSmartFluidPipeBlock;
@@ -48,6 +44,7 @@ import static com.drmangotea.createindustry.CreateTFMG.REGISTRATE;
import static com.simibubi.create.foundation.data.ModelGen.customItemModel;
import static com.simibubi.create.foundation.data.TagGen.axeOrPickaxe;
import static com.simibubi.create.foundation.data.TagGen.pickaxeOnly;
import static com.drmangotea.createindustry.registry.TFMGPartialModels.*;
public class TFMGPipes {
@@ -61,7 +58,7 @@ public class TFMGPipes {
.initialProperties(() -> Blocks.IRON_BLOCK)
.transform(pickaxeOnly())
.blockstate(BlockStateGen.pipe())
.onRegister(CreateRegistrate.blockModel(() -> SteelPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, STEEL_PIPE_ATTACHMENTS, STEEL_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -76,7 +73,7 @@ public class TFMGPipes {
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCTBehaviour(AllSpriteShifts.COPPER_CASING)))
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.COPPER_CASING,
(s, f) -> !s.getValue(EncasedSteelPipeBlock.FACING_TO_PROPERTY_MAP.get(f)))))
.onRegister(CreateRegistrate.blockModel(() -> SteelPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, STEEL_PIPE_ATTACHMENTS, STEEL_FLUID_PIPE_CASING)))
.loot((p, b) -> p.dropOther(b, STEEL_PIPE.get()))
.transform(EncasingRegistry.addVariantTo(TFMGPipes.STEEL_PIPE))
.register();
@@ -101,7 +98,7 @@ public class TFMGPipes {
.build();
}, BlockStateProperties.WATERLOGGED);
})
.onRegister(CreateRegistrate.blockModel(() -> SteelPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, STEEL_PIPE_ATTACHMENTS, STEEL_FLUID_PIPE_CASING)))
.loot((p, b) -> p.dropOther(b, STEEL_PIPE.get()))
.register();
@@ -111,7 +108,7 @@ public class TFMGPipes {
.properties(p -> p.color(MaterialColor.STONE))
.transform(pickaxeOnly())
.blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(true))
.onRegister(CreateRegistrate.blockModel(() -> SteelPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, STEEL_PIPE_ATTACHMENTS, STEEL_FLUID_PIPE_CASING)))
.transform(BlockStressDefaults.setImpact(4.0))
.item()
.transform(customItemModel())
@@ -123,7 +120,7 @@ public class TFMGPipes {
.properties(p -> p.color(MaterialColor.STONE))
.transform(pickaxeOnly())
.blockstate(new SmartFluidPipeGenerator()::generate)
.onRegister(CreateRegistrate.blockModel(() -> SteelPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, STEEL_PIPE_ATTACHMENTS, STEEL_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -134,7 +131,7 @@ public class TFMGPipes {
.blockstate((c, p) -> BlockStateGen.directionalAxisBlock(c, p,
(state, vertical) -> AssetLookup.partialBaseModel(c, p, vertical ? "vertical" : "horizontal",
state.getValue(FluidValveBlock.ENABLED) ? "open" : "closed")))
.onRegister(CreateRegistrate.blockModel(() -> SteelPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, STEEL_PIPE_ATTACHMENTS, STEEL_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -143,7 +140,7 @@ public class TFMGPipes {
.initialProperties(() -> Blocks.IRON_BLOCK)
.transform(pickaxeOnly())
.blockstate(BlockStateGen.pipe())
.onRegister(CreateRegistrate.blockModel(() -> CastIronPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, CAST_IRON_PIPE_ATTACHMENTS, CAST_IRON_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -158,7 +155,7 @@ public class TFMGPipes {
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCTBehaviour(AllSpriteShifts.COPPER_CASING)))
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.COPPER_CASING,
(s, f) -> !s.getValue(EncasedCastIronPipeBlock.FACING_TO_PROPERTY_MAP.get(f)))))
.onRegister(CreateRegistrate.blockModel(() -> CastIronPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, CAST_IRON_PIPE_ATTACHMENTS, CAST_IRON_FLUID_PIPE_CASING)))
.loot((p, b) -> p.dropOther(b, CAST_IRON_PIPE.get()))
.transform(EncasingRegistry.addVariantTo(TFMGPipes.CAST_IRON_PIPE))
.register();
@@ -183,7 +180,7 @@ public class TFMGPipes {
.build();
}, BlockStateProperties.WATERLOGGED);
})
.onRegister(CreateRegistrate.blockModel(() -> CastIronPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, CAST_IRON_PIPE_ATTACHMENTS, CAST_IRON_FLUID_PIPE_CASING)))
.loot((p, b) -> p.dropOther(b, CAST_IRON_PIPE.get()))
.register();
@@ -193,7 +190,7 @@ public class TFMGPipes {
.properties(p -> p.color(MaterialColor.STONE))
.transform(pickaxeOnly())
.blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(true))
.onRegister(CreateRegistrate.blockModel(() -> CastIronPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, CAST_IRON_PIPE_ATTACHMENTS, CAST_IRON_FLUID_PIPE_CASING)))
.transform(BlockStressDefaults.setImpact(4.0))
.item()
.transform(customItemModel())
@@ -205,7 +202,7 @@ public class TFMGPipes {
.properties(p -> p.color(MaterialColor.STONE))
.transform(pickaxeOnly())
.blockstate(new SmartFluidPipeGenerator()::generate)
.onRegister(CreateRegistrate.blockModel(() -> CastIronPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, CAST_IRON_PIPE_ATTACHMENTS, CAST_IRON_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -216,7 +213,7 @@ public class TFMGPipes {
.blockstate((c, p) -> BlockStateGen.directionalAxisBlock(c, p,
(state, vertical) -> AssetLookup.partialBaseModel(c, p, vertical ? "vertical" : "horizontal",
state.getValue(FluidValveBlock.ENABLED) ? "open" : "closed")))
.onRegister(CreateRegistrate.blockModel(() -> CastIronPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, CAST_IRON_PIPE_ATTACHMENTS, CAST_IRON_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -225,7 +222,7 @@ public class TFMGPipes {
.initialProperties(() -> Blocks.IRON_BLOCK)
.transform(pickaxeOnly())
.blockstate(BlockStateGen.pipe())
.onRegister(CreateRegistrate.blockModel(() -> BrassPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, BRASS_PIPE_ATTACHMENTS, BRASS_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -240,7 +237,7 @@ public class TFMGPipes {
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCTBehaviour(AllSpriteShifts.COPPER_CASING)))
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.COPPER_CASING,
(s, f) -> !s.getValue(EncasedBrassPipeBlock.FACING_TO_PROPERTY_MAP.get(f)))))
.onRegister(CreateRegistrate.blockModel(() -> BrassPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, BRASS_PIPE_ATTACHMENTS, BRASS_FLUID_PIPE_CASING)))
.loot((p, b) -> p.dropOther(b, BRASS_PIPE.get()))
.transform(EncasingRegistry.addVariantTo(TFMGPipes.BRASS_PIPE))
.register();
@@ -265,7 +262,7 @@ public class TFMGPipes {
.build();
}, BlockStateProperties.WATERLOGGED);
})
.onRegister(CreateRegistrate.blockModel(() -> BrassPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, BRASS_PIPE_ATTACHMENTS, BRASS_FLUID_PIPE_CASING)))
.loot((p, b) -> p.dropOther(b, STEEL_PIPE.get()))
.register();
@@ -275,7 +272,7 @@ public class TFMGPipes {
.properties(p -> p.color(MaterialColor.STONE))
.transform(pickaxeOnly())
.blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(true))
.onRegister(CreateRegistrate.blockModel(() -> BrassPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, BRASS_PIPE_ATTACHMENTS, BRASS_FLUID_PIPE_CASING)))
.transform(BlockStressDefaults.setImpact(4.0))
.item()
.transform(customItemModel())
@@ -287,7 +284,7 @@ public class TFMGPipes {
.properties(p -> p.color(MaterialColor.STONE))
.transform(pickaxeOnly())
.blockstate(new SmartFluidPipeGenerator()::generate)
.onRegister(CreateRegistrate.blockModel(() -> BrassPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, BRASS_PIPE_ATTACHMENTS, BRASS_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -298,7 +295,7 @@ public class TFMGPipes {
.blockstate((c, p) -> BlockStateGen.directionalAxisBlock(c, p,
(state, vertical) -> AssetLookup.partialBaseModel(c, p, vertical ? "vertical" : "horizontal",
state.getValue(FluidValveBlock.ENABLED) ? "open" : "closed")))
.onRegister(CreateRegistrate.blockModel(() -> BrassPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, BRASS_PIPE_ATTACHMENTS, BRASS_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -307,7 +304,7 @@ public class TFMGPipes {
.initialProperties(() -> Blocks.QUARTZ_BLOCK)
.transform(pickaxeOnly())
.blockstate(BlockStateGen.pipe())
.onRegister(CreateRegistrate.blockModel(() -> PlasticPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, PLASTIC_PIPE_ATTACHMENTS, PLASTIC_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -322,7 +319,7 @@ public class TFMGPipes {
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCTBehaviour(AllSpriteShifts.COPPER_CASING)))
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.COPPER_CASING,
(s, f) -> !s.getValue(EncasedPlasticPipeBlock.FACING_TO_PROPERTY_MAP.get(f)))))
.onRegister(CreateRegistrate.blockModel(() -> PlasticPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, PLASTIC_PIPE_ATTACHMENTS, PLASTIC_FLUID_PIPE_CASING)))
.loot((p, b) -> p.dropOther(b, PLASTIC_PIPE.get()))
.transform(EncasingRegistry.addVariantTo(TFMGPipes.PLASTIC_PIPE))
.register();
@@ -347,7 +344,7 @@ public class TFMGPipes {
.build();
}, BlockStateProperties.WATERLOGGED);
})
.onRegister(CreateRegistrate.blockModel(() -> PlasticPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, PLASTIC_PIPE_ATTACHMENTS, PLASTIC_FLUID_PIPE_CASING)))
.loot((p, b) -> p.dropOther(b, PLASTIC_PIPE.get()))
.register();
@@ -357,7 +354,7 @@ public class TFMGPipes {
.properties(p -> p.color(MaterialColor.STONE))
.transform(pickaxeOnly())
.blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(true))
.onRegister(CreateRegistrate.blockModel(() -> PlasticPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, PLASTIC_PIPE_ATTACHMENTS, PLASTIC_FLUID_PIPE_CASING)))
.transform(BlockStressDefaults.setImpact(4.0))
.item()
.transform(customItemModel())
@@ -369,7 +366,7 @@ public class TFMGPipes {
.properties(p -> p.color(MaterialColor.STONE))
.transform(pickaxeOnly())
.blockstate(new SmartFluidPipeGenerator()::generate)
.onRegister(CreateRegistrate.blockModel(() -> PlasticPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, PLASTIC_PIPE_ATTACHMENTS, PLASTIC_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -380,7 +377,7 @@ public class TFMGPipes {
.blockstate((c, p) -> BlockStateGen.directionalAxisBlock(c, p,
(state, vertical) -> AssetLookup.partialBaseModel(c, p, vertical ? "vertical" : "horizontal",
state.getValue(FluidValveBlock.ENABLED) ? "open" : "closed")))
.onRegister(CreateRegistrate.blockModel(() -> PlasticPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, PLASTIC_PIPE_ATTACHMENTS, PLASTIC_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -389,7 +386,7 @@ public class TFMGPipes {
.initialProperties(() -> Blocks.IRON_BLOCK)
.transform(pickaxeOnly())
.blockstate(BlockStateGen.pipe())
.onRegister(CreateRegistrate.blockModel(() -> AluminumPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, ALUMINUM_PIPE_ATTACHMENTS, ALUMINUM_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -404,7 +401,7 @@ public class TFMGPipes {
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCTBehaviour(AllSpriteShifts.COPPER_CASING)))
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.COPPER_CASING,
(s, f) -> !s.getValue(EncasedAluminumPipeBlock.FACING_TO_PROPERTY_MAP.get(f)))))
.onRegister(CreateRegistrate.blockModel(() -> AluminumPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, ALUMINUM_PIPE_ATTACHMENTS, ALUMINUM_FLUID_PIPE_CASING)))
.loot((p, b) -> p.dropOther(b, ALUMINUM_PIPE.get()))
.transform(EncasingRegistry.addVariantTo(TFMGPipes.ALUMINUM_PIPE))
.register();
@@ -416,20 +413,18 @@ public class TFMGPipes {
.initialProperties(SharedProperties::copperMetal)
.addLayer(() -> RenderType::cutoutMipped)
.transform(pickaxeOnly())
.blockstate((c, p) -> {
p.getVariantBuilder(c.getEntry())
.forAllStatesExcept(state -> {
Direction.Axis axis = state.getValue(BlockStateProperties.AXIS);
return ConfiguredModel.builder()
.modelFile(p.models()
.getExistingFile(p.modLoc("block/aluminum_pipe/window")))
.uvLock(false)
.rotationX(axis == Direction.Axis.Y ? 0 : 90)
.rotationY(axis == Direction.Axis.X ? 90 : 0)
.build();
}, BlockStateProperties.WATERLOGGED);
})
.onRegister(CreateRegistrate.blockModel(() -> AluminumPipeAttachmentModel::new))
.blockstate((c, p) -> p.getVariantBuilder(c.getEntry())
.forAllStatesExcept(state -> {
Direction.Axis axis = state.getValue(BlockStateProperties.AXIS);
return ConfiguredModel.builder()
.modelFile(p.models()
.getExistingFile(p.modLoc("block/aluminum_pipe/window")))
.uvLock(false)
.rotationX(axis == Direction.Axis.Y ? 0 : 90)
.rotationY(axis == Direction.Axis.X ? 90 : 0)
.build();
}, BlockStateProperties.WATERLOGGED))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, ALUMINUM_PIPE_ATTACHMENTS, ALUMINUM_FLUID_PIPE_CASING)))
.loot((p, b) -> p.dropOther(b, ALUMINUM_PIPE.get()))
.register();
@@ -439,7 +434,7 @@ public class TFMGPipes {
.properties(p -> p.color(MaterialColor.STONE))
.transform(pickaxeOnly())
.blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(true))
.onRegister(CreateRegistrate.blockModel(() -> AluminumPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, ALUMINUM_PIPE_ATTACHMENTS, ALUMINUM_FLUID_PIPE_CASING)))
.transform(BlockStressDefaults.setImpact(4.0))
.item()
.transform(customItemModel())
@@ -451,7 +446,7 @@ public class TFMGPipes {
.properties(p -> p.color(MaterialColor.STONE))
.transform(pickaxeOnly())
.blockstate(new SmartFluidPipeGenerator()::generate)
.onRegister(CreateRegistrate.blockModel(() -> AluminumPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, ALUMINUM_PIPE_ATTACHMENTS, ALUMINUM_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();
@@ -462,7 +457,7 @@ public class TFMGPipes {
.blockstate((c, p) -> BlockStateGen.directionalAxisBlock(c, p,
(state, vertical) -> AssetLookup.partialBaseModel(c, p, vertical ? "vertical" : "horizontal",
state.getValue(FluidValveBlock.ENABLED) ? "open" : "closed")))
.onRegister(CreateRegistrate.blockModel(() -> AluminumPipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> model -> new GeneralPipeAttachmentModel(model, ALUMINUM_PIPE_ATTACHMENTS, ALUMINUM_FLUID_PIPE_CASING)))
.item()
.transform(customItemModel())
.register();

View File

@@ -3,21 +3,24 @@ package com.drmangotea.createindustry.base.creative_mode_tabs;
import java.util.Collection;
import com.drmangotea.createindustry.CreateTFMG;
import com.simibubi.create.compat.jei.CreateJEI;
import com.simibubi.create.infrastructure.item.CreateCreativeModeTab;
import com.tterrag.registrate.util.entry.RegistryEntry;
import io.github.fabricators_of_create.porting_lib.util.ItemGroupUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.NonNullList;
import net.minecraft.core.Registry;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.registries.ForgeRegistries;
public abstract class TFMGCreativeModeTab extends CreativeModeTab {
public TFMGCreativeModeTab(String id) {
super(CreateTFMG.MOD_ID + "." + id);
super(ItemGroupUtil.expandArrayAndGetId(), CreateTFMG.MOD_ID + "." + id);
}
@Override
@@ -28,7 +31,7 @@ public abstract class TFMGCreativeModeTab extends CreativeModeTab {
}
protected Collection<RegistryEntry<Item>> registeredItems() {
return CreateTFMG.REGISTRATE.getAll(ForgeRegistries.ITEMS.getRegistryKey());
return CreateTFMG.REGISTRATE.getAll(Registry.ITEM.key());
}
public void addBlocks(NonNullList<ItemStack> items) {

View File

@@ -10,6 +10,8 @@ import com.tterrag.registrate.providers.RegistrateRecipeProvider;
import com.tterrag.registrate.util.nullness.NonNullBiConsumer;
import com.tterrag.registrate.util.nullness.NonNullFunction;
import com.tterrag.registrate.util.nullness.NonNullSupplier;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation;
@@ -18,8 +20,6 @@ import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.model.generators.ConfiguredModel;
import java.util.Optional;
@@ -74,7 +74,7 @@ public class TFMGPaletteBlockPattern {
private NonNullFunction<NonNullSupplier<Block>, NonNullBiConsumer<DataGenContext<Block, ? extends Block>, RegistrateRecipeProvider>> additionalRecipes;
private TFMGPaletteBlockPartial<? extends Block>[] partials;
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
private RenderType renderType;
private static TFMGPaletteBlockPattern create(String name, TFMGPaletteBlockPattern.PatternNameType nameType,

View File

@@ -0,0 +1,21 @@
package com.drmangotea.createindustry.base.util;
import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
import com.simibubi.create.foundation.item.SmartInventory;
import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant;
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
import net.fabricmc.fabric.api.transfer.v1.storage.base.CombinedStorage;
import java.util.Arrays;
public class CombinedStorageWrapper extends CombinedStorage<ItemVariant, Storage<ItemVariant>> {
@SafeVarargs
public CombinedStorageWrapper(Storage<ItemVariant>... parts) {
super(Arrays.stream(parts).toList());
}
// public CombinedStorageWrapper(SmartInventory... invs) {
// super();
// }
}

View File

@@ -4,14 +4,20 @@ import com.drmangotea.createindustry.base.ElectricSparkParticle;
import com.drmangotea.createindustry.base.util.spark.Spark;
import com.drmangotea.createindustry.registry.TFMGEntityTypes;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.utility.VecHelper;
import io.github.fabricators_of_create.porting_lib.mixin.common.ProjectileUtilMixin;
import io.github.fabricators_of_create.porting_lib.transfer.TransferUtil;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction;
import net.minecraft.core.BlockPos;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityEvent;
import net.minecraft.world.entity.projectile.ProjectileUtil;
import net.minecraft.world.level.Explosion;
import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
@@ -70,4 +76,29 @@ public class TFMGUtils {
}
}
public static void drain(FluidTank tank, long amount) {
try (Transaction t = TransferUtil.getTransaction()) {
tank.extract(tank.variant, amount, t);
t.commit();
}
}
public static long fill(FluidTank tank, FluidStack fluid) {
if (!tank.isEmpty() && tank.variant != fluid.getType())
throw new RuntimeException("fluid variant being filled into tank isn't the same variant as the fluid in the tank");
try (Transaction t = TransferUtil.getTransaction()) {
tank.insert(fluid.getType(), fluid.getAmount(), t);
t.commit();
}
return fluid.getAmount();
}
// public static boolean mobGriefingEvent(Level level, Entity entity) {
// EntityEvent event = ProjectileUtil.;
// MinecraftForge.EVENT_BUS.post(event);
// boolean result = event.getResult();
// return result == Result.DEFAULT ? level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) : result == Result.ALLOW;
// }
}

View File

@@ -1,19 +1,19 @@
package com.drmangotea.createindustry.base.util.spark;
import com.drmangotea.createindustry.items.weapons.explosives.pipe_bomb.PipeBomb;
import com.drmangotea.createindustry.items.weapons.explosives.thermite_grenades.fire.BlueFireBlock;
import com.drmangotea.createindustry.registry.TFMGEntityTypes;
import com.drmangotea.createindustry.registry.TFMGItems;
import com.simibubi.create.content.trains.CubeParticleData;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.*;
import net.minecraft.world.entity.projectile.ThrowableProjectile;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.EntityHitResult;
@@ -79,7 +79,7 @@ public class BlueSpark extends ThrowableProjectile {
super.onHitBlock(p_37384_);
if (!this.level.isClientSide) {
Entity entity = this.getOwner();
if (!(entity instanceof Mob) || net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.level, this)) {
if (!(entity instanceof Mob) || level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
BlockPos blockpos = p_37384_.getBlockPos().relative(p_37384_.getDirection());
if (this.level.isEmptyBlock(blockpos)) {
this.level.setBlockAndUpdate(blockpos, BlueFireBlock.getState(this.level, blockpos));
@@ -115,8 +115,8 @@ public class BlueSpark extends ThrowableProjectile {
}
@SuppressWarnings("unchecked")
public static EntityType.Builder<?> build(EntityType.Builder<?> builder) {
EntityType.Builder<BlueSpark> entityBuilder = (EntityType.Builder<BlueSpark>) builder;
return entityBuilder.sized(.25f, .25f);
public static FabricEntityTypeBuilder<BlueSpark> build(FabricEntityTypeBuilder<?> builder) {
FabricEntityTypeBuilder<BlueSpark> entityBuilder = (FabricEntityTypeBuilder<BlueSpark>) builder;
return entityBuilder.dimensions(EntityDimensions.scalable(.25f, .25f));
}
}

View File

@@ -6,6 +6,8 @@ import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Matrix3f;
import com.mojang.math.Matrix4f;
import com.mojang.math.Vector3f;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRenderer;
@@ -13,10 +15,8 @@ import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
public class BlueSparkRenderer extends EntityRenderer<BlueSpark> {
private static final ResourceLocation TEXTURE_LOCATION = CreateTFMG.asResource("textures/entity/blue_spark.png");
private static final RenderType RENDER_TYPE = RenderType.entityCutoutNoCull(TEXTURE_LOCATION);

View File

@@ -5,15 +5,14 @@ import com.drmangotea.createindustry.items.weapons.explosives.thermite_grenades.
import com.drmangotea.createindustry.registry.TFMGEntityTypes;
import com.drmangotea.createindustry.registry.TFMGItems;
import com.simibubi.create.content.trains.CubeParticleData;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.*;
import net.minecraft.world.entity.projectile.ThrowableProjectile;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.EntityHitResult;
@@ -79,7 +78,7 @@ public class GreenSpark extends ThrowableProjectile {
super.onHitBlock(p_37384_);
if (!this.level.isClientSide) {
Entity entity = this.getOwner();
if (!(entity instanceof Mob) || net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.level, this)) {
if (!(entity instanceof Mob) || level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
BlockPos blockpos = p_37384_.getBlockPos().relative(p_37384_.getDirection());
if (this.level.isEmptyBlock(blockpos)) {
this.level.setBlockAndUpdate(blockpos, GreenFireBlock.getState(this.level, blockpos));
@@ -115,8 +114,8 @@ public class GreenSpark extends ThrowableProjectile {
}
@SuppressWarnings("unchecked")
public static EntityType.Builder<?> build(EntityType.Builder<?> builder) {
EntityType.Builder<GreenSpark> entityBuilder = (EntityType.Builder<GreenSpark>) builder;
return entityBuilder.sized(.25f, .25f);
public static FabricEntityTypeBuilder<GreenSpark> build(FabricEntityTypeBuilder<?> builder) {
FabricEntityTypeBuilder<GreenSpark> entityBuilder = (FabricEntityTypeBuilder<GreenSpark>) builder;
return entityBuilder.dimensions(EntityDimensions.scalable(.25f, .25f));
}
}

View File

@@ -6,6 +6,8 @@ import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Matrix3f;
import com.mojang.math.Matrix4f;
import com.mojang.math.Vector3f;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRenderer;
@@ -13,10 +15,8 @@ import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
public class GreenSparkRenderer extends EntityRenderer<GreenSpark> {
private static final ResourceLocation TEXTURE_LOCATION = CreateTFMG.asResource("textures/entity/green_spark.png");
private static final RenderType RENDER_TYPE = RenderType.entityCutoutNoCull(TEXTURE_LOCATION);

View File

@@ -3,15 +3,14 @@ package com.drmangotea.createindustry.base.util.spark;
import com.drmangotea.createindustry.registry.TFMGEntityTypes;
import com.drmangotea.createindustry.registry.TFMGItems;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.*;
import net.minecraft.world.entity.projectile.ThrowableProjectile;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.BaseFireBlock;
import net.minecraft.world.phys.BlockHitResult;
@@ -75,7 +74,7 @@ public class Spark extends ThrowableProjectile {
super.onHitBlock(p_37384_);
if (!this.level.isClientSide) {
Entity entity = this.getOwner();
if (!(entity instanceof Mob) || net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.level, this)) {
if (!(entity instanceof Mob) || level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
BlockPos blockpos = p_37384_.getBlockPos().relative(p_37384_.getDirection());
if (this.level.isEmptyBlock(blockpos)) {
this.level.setBlockAndUpdate(blockpos, BaseFireBlock.getState(this.level, blockpos));
@@ -111,8 +110,8 @@ public class Spark extends ThrowableProjectile {
}
@SuppressWarnings("unchecked")
public static EntityType.Builder<?> build(EntityType.Builder<?> builder) {
EntityType.Builder<Spark> entityBuilder = (EntityType.Builder<Spark>) builder;
return entityBuilder.sized(.25f, .25f);
public static FabricEntityTypeBuilder<Spark> build(FabricEntityTypeBuilder<?> builder) {
FabricEntityTypeBuilder<Spark> entityBuilder = (FabricEntityTypeBuilder<Spark>) builder;
return entityBuilder.dimensions(EntityDimensions.scalable(.25f, .25f));
}
}

View File

@@ -5,6 +5,8 @@ import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Matrix3f;
import com.mojang.math.Matrix4f;
import com.mojang.math.Vector3f;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRenderer;
@@ -12,10 +14,8 @@ import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
public class SparkRenderer extends EntityRenderer<Spark> {
private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation("textures/particle/lava.png");
private static final RenderType RENDER_TYPE = RenderType.entityCutoutNoCull(TEXTURE_LOCATION);

View File

@@ -1,18 +1,17 @@
package com.drmangotea.createindustry.blocks.concrete;
import com.drmangotea.createindustry.registry.TFMGBlocks;
import com.tterrag.registrate.fabric.SimpleFlowableFluid;
import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.FluidState;
import net.minecraftforge.fluids.ForgeFlowingFluid;
public class ConcreteFluid extends ForgeFlowingFluid {
public class ConcreteFluid extends SimpleFlowableFluid {
protected ConcreteFluid(Properties properties) {
public ConcreteFluid(Properties properties) {
super(properties);
}

View File

@@ -6,6 +6,8 @@ import com.mojang.math.Vector3f;
import com.simibubi.create.AllFluids;
import com.simibubi.create.foundation.utility.Color;
import com.tterrag.registrate.builders.FluidBuilder;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.SimpleFlowableFluid;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
@@ -13,17 +15,18 @@ import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.fluids.FluidStack;
import java.util.function.Supplier;
public class ConcreteFluidType extends AllFluids.TintedFluidType {
import static net.minecraft.client.renderer.block.model.BlockElementFace.NO_TINT;
public class ConcreteFluidType extends SimpleFlowableFluid {
private Vector3f fogColor;
private Supplier<Float> fogDistance;
public static FluidBuilder.FluidTypeFactory create(int fogColor, Supplier<Float> fogDistance) {
public static FluidBuilder create(int fogColor, Supplier<Float> fogDistance) {
return (p, s, f) -> {
ConcreteFluidType fluidType = new ConcreteFluidType(p, s, f);
fluidType.fogColor = new Color(fogColor, false).asVectorF();
@@ -32,7 +35,7 @@ public class ConcreteFluidType extends AllFluids.TintedFluidType {
};
}
private ConcreteFluidType(Properties properties, ResourceLocation stillTexture,
private ConcreteFluidType(SimpleFlowableFluid.Properties properties, ResourceLocation stillTexture,
ResourceLocation flowingTexture) {
super(properties, stillTexture, flowingTexture);
}

View File

@@ -1,15 +1,17 @@
package com.drmangotea.createindustry.blocks.concrete.asphalt;
import com.drmangotea.createindustry.registry.TFMGBlocks;
import com.tterrag.registrate.fabric.SimpleFlowableFluid;
import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.FluidState;
import net.minecraftforge.fluids.ForgeFlowingFluid;
public class AsphaltFluid extends ForgeFlowingFluid {
import java.util.Properties;
public class AsphaltFluid extends SimpleFlowableFluid {
protected AsphaltFluid(Properties properties) {

View File

@@ -5,15 +5,16 @@ import com.drmangotea.createindustry.registry.TFMGBlocks;
import com.drmangotea.createindustry.registry.TFMGFluids;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
public class FormWorkBlockEntity extends TFMGMachineBlockEntity {
@@ -42,9 +43,10 @@ public class FormWorkBlockEntity extends TFMGMachineBlockEntity {
public boolean isFluidValid(FluidStack stack) {
return stack.getFluid().isSame(TFMGFluids.LIQUID_CONCRETE.getSource());
}
@Override
public FluidStack drain(FluidStack resource, FluidAction action) {
return FluidStack.EMPTY;
public long extract(FluidVariant extractedVariant, long maxAmount, TransactionContext transaction) {
return 0;
}
};
}
@@ -115,16 +117,16 @@ public class FormWorkBlockEntity extends TFMGMachineBlockEntity {
FluidTank checkedTank = ((FormWorkBlockEntity) CheckedBE).tankInventory;
if (checkedTank.getFluidAmount() < 1000) {
if(checkedTank.getFluidAmount()>=995&&tankInventory.getFluidAmount()>0){
checkedTank.setFluid(new FluidStack(TFMGFluids.LIQUID_CONCRETE.getSource(), checkedTank.getFluidAmount()+1));
checkedTank.setFluid(new FluidStack(FluidVariant.of(TFMGFluids.LIQUID_CONCRETE.getSource()), checkedTank.getFluidAmount()+1));
//tankInventory.drain(1, IFluidHandler.FluidAction.EXECUTE);
// continue;
}
int reducedAmount = tankInventory.getFluidAmount() / 8;
int reducedAmount = (int) (tankInventory.getFluidAmount() / 8);
if (tankInventory.getFluidAmount() != 0)
reducedAmount = 1;
int newFluidAmount = checkedTank.getFluidAmount() + reducedAmount;
int newFluidAmount = (int) (checkedTank.getFluidAmount() + reducedAmount);
int toRemove = reducedAmount;
//if full
@@ -136,7 +138,7 @@ public class FormWorkBlockEntity extends TFMGMachineBlockEntity {
}
//
checkedTank.setFluid(new FluidStack(TFMGFluids.LIQUID_CONCRETE.getSource(), newFluidAmount));
tankInventory.drain(1, IFluidHandler.FluidAction.EXECUTE);
tankInventory.extract(1, FluidTank.FluidAction.EXECUTE);
}
}

View File

@@ -13,12 +13,12 @@ import com.simibubi.create.foundation.render.CachedBufferer;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.templates.FluidTank;
public class FormWorkRenderer extends SafeBlockEntityRenderer<FormWorkBlockEntity> {

View File

@@ -7,16 +7,14 @@ import com.drmangotea.createindustry.registry.TFMGFluids;
import com.jozufozu.flywheel.core.GameStateRegistry;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import net.minecraft.commands.arguments.blocks.BlockStateArgument;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
public class RebarFormWorkBlockEntity extends FormWorkBlockEntity {

View File

@@ -15,13 +15,13 @@ import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider.Context;
import net.minecraft.core.Direction;
import net.minecraft.core.Registry;
import net.minecraft.util.Mth;
import net.minecraft.world.level.block.DoorBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.DoorHingeSide;
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.registries.ForgeRegistries;
public class TFMGSlidingDoorRenderer extends SafeBlockEntityRenderer<TFMGSlidingDoorBlockEntity> {
@@ -51,7 +51,7 @@ public class TFMGSlidingDoorRenderer extends SafeBlockEntityRenderer<TFMGSliding
if (((TFMGSlidingDoorBlock) blockState.getBlock()).isFoldingDoor()) {
Couple<PartialModel> partials =
TFMGPartialModels.FOLDING_DOORS.get(ForgeRegistries.BLOCKS.getKey(blockState.getBlock()));
TFMGPartialModels.FOLDING_DOORS.get(Registry.BLOCK.getKey(blockState.getBlock()));
if(partials==null)
return;
boolean flip = blockState.getValue(DoorBlock.HINGE) == DoorHingeSide.RIGHT;

View File

@@ -0,0 +1,39 @@
package com.drmangotea.createindustry.blocks.electricity.api;
import com.drmangotea.createindustry.blocks.electricity.base.IElectricBlock;
import static org.apache.commons.lang3.ObjectUtils.min;
public class Energy {
long voltage;
long current;
public Energy(long voltage, long current) {
this.current = current;
this.voltage = current;
}
public long getVoltage() {
return voltage;
}
public long getCurrent() {
return current;
}
public long discharge(long amount, boolean simulate) {
return amount;
}
public long charge(long amount, boolean simulate) {
return amount;
}
public long transfer(IElectricBlock to, long amount, boolean simulate) {
long discharge = discharge(amount, true);
long charge = to.getStorage().charge(amount, true);
return min(discharge, charge);
}
}

View File

@@ -28,11 +28,6 @@ public class ConverterBlockEntity extends ElectricBlockEntity {
@Override
public void tick() {
super.tick();
}
@Override

View File

@@ -4,18 +4,13 @@ import com.drmangotea.createindustry.base.util.TFMGUtils;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.ChatFormatting;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.IEnergyStorage;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable;
@@ -85,22 +80,6 @@ public class ElectricBlockEntity extends SmartBlockEntity implements IHaveGoggle
lazyEnergyHandler.invalidate();
}
@Override
public @NotNull <T> LazyOptional<T> getCapability(@NotNull Capability<T> cap, @Nullable Direction side) {
if (cap == ForgeCapabilities.ENERGY&&side == null) {
return lazyEnergyHandler.cast();
} else
if (cap == ForgeCapabilities.ENERGY&&hasElectricitySlot(side)) {
return lazyEnergyHandler.cast();
}
return super.getCapability(cap, side);
}
public void manageVoltage(){
if(voltageGeneration()>0) {

View File

@@ -1,42 +1,28 @@
package com.drmangotea.createindustry.blocks.electricity.base;
import com.drmangotea.createindustry.CreateTFMG;
import com.drmangotea.createindustry.blocks.electricity.capacitor.CapacitorBlockEntity;
import com.drmangotea.createindustry.blocks.electricity.api.Energy;
import com.drmangotea.createindustry.blocks.electricity.resistors.ResistorBlockEntity;
import com.drmangotea.createindustry.registry.TFMGBlocks;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.LeverBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.energy.EnergyStorage;
public interface IElectricBlock {
float internalResistance();
Energy getStorage();
int getVoltage();
boolean gotFElastTick(int value);
int getCurrent();
int feGeneration();
int voltageGeneration();
int transferSpeed();
void addVoltage(float amount);
default float getCharge(){
@@ -47,22 +33,14 @@ public interface IElectricBlock {
return false;
}
TFMGForgeEnergyStorage getForgeEnergy();
boolean hasElectricitySlot(Direction direction);
float maxVoltage();
void explode();
int FECapacity();
int getDistanceFromSource();
void setDistanceFromSource(int value);
void sendStuff();
@@ -81,8 +59,6 @@ public interface IElectricBlock {
boolean getsVoltageFromNonTFMGBlock = false;
if(canBeDisabled()){
@@ -98,37 +74,29 @@ public interface IElectricBlock {
if(be1 instanceof IElectricBlock be2){
if(be2.hasElectricitySlot(direction.getOpposite())) {
int distance = be2.getDistanceFromSource();
if(!isStorage()&&be2.isStorage()&&direction == Direction.UP)
distance = Integer.MAX_VALUE;
if(getVoltage()==0) {
if(distance>getDistanceFromSource())
be2.addVoltage(getVoltage());
}
if(!(be2 instanceof ConverterBlockEntity))
if(!(isStorage()&&direction == Direction.DOWN))
if(!(!isStorage()&&be2.isStorage()&&direction == Direction.DOWN))
if(getVoltage()!=0) {
// if(Create.RANDOM.nextInt(3) ==1)
transferCharge(be2);
if(distance>getDistanceFromSource()){
be2.addVoltage(getVoltage());
}
}
lowestDistance = Math.min(lowestDistance,distance);
if(!(isStorage()&&direction == Direction.DOWN))
if(!(!isStorage()&&be2.isStorage()&&direction == Direction.DOWN))
if(getVoltage()!=0) {
// if(Create.RANDOM.nextInt(3) ==1)
transferCharge(be2);
if(distance>getDistanceFromSource())
be2.addVoltage(getVoltage());
}
lowestDistance = Math.min(lowestDistance,distance);
}
if(direction.getAxis().isHorizontal()) {
if (be2 instanceof ResistorBlockEntity resistorBE)
@@ -139,12 +107,7 @@ public interface IElectricBlock {
}
}else
if(be1!=null) {
} else if(be1!=null) {
if (be1.getCapability(ForgeCapabilities.ENERGY, direction.getOpposite()).isPresent()) {
if (!(be1.getCapability(ForgeCapabilities.ENERGY, direction.getOpposite()).orElse(new EnergyStorage(0)) instanceof TFMGForgeEnergyStorage)) {
@@ -223,114 +186,47 @@ public interface IElectricBlock {
addVoltage(0);
}
//PLUH
default void transferCharge(IElectricBlock be) {
if(!isStorage()) {
if (be.getDistanceFromSource() > getDistanceFromSource()||be.isStorage()) {
//int amount = getForgeEnergy().extractEnergy(transferSpeed(), true);
//int amount2 = be.getForgeEnergy().receiveEnergy( transferSpeed(), true);
int amount = getForgeEnergy().extractEnergy(transferSpeed()*100, true);
int amount2 = be.getForgeEnergy().receiveEnergy(transferSpeed()*100, true);
getForgeEnergy().extractEnergy(Math.min(amount, amount2), false);
be.getForgeEnergy().receiveEnergy(Math.min(amount, amount2), false);
}
if(be.getDistanceFromSource()==getDistanceFromSource()&&getForgeEnergy().getEnergyStored()>be.getForgeEnergy().getEnergyStored()){
int diff = Math.abs(getForgeEnergy().getEnergyStored()-be.getForgeEnergy().getEnergyStored());
int amount = getForgeEnergy().extractEnergy(diff / 2, true);
int amount2 = be.getForgeEnergy().receiveEnergy( diff / 2, true);
getForgeEnergy().extractEnergy( Math.min(amount,amount2), false);
be.getForgeEnergy().receiveEnergy( Math.min(amount,amount2), false);
boolean hasHigherVoltage = getStorage().getVoltage() > be.getStorage().getVoltage();
if(isStorage()) {
if(be.isStorage() && !hasHigherVoltage) {
long amount = getStorage().transfer(be, transferSpeed() * 10, true);
getStorage().transfer(be, amount, false);
} else {
long amount = be.getStorage().transfer(be, transferSpeed(), true);
getStorage().transfer(be, amount, false);
}
} else {
if (be.getDistanceFromSource() > getDistanceFromSource() || be.isStorage()) {
long amount = getStorage().transfer(be, transferSpeed()*100, true);
getStorage().transfer(be, amount, false);
}
if(be.getDistanceFromSource() == getDistanceFromSource() && hasHigherVoltage){
long diff = Math.abs(getStorage().getVoltage() - be.getStorage().getVoltage());
long amount = getStorage().transfer(be, diff / 2, true);
getStorage().transfer(be, amount, false);
}
}
if(isStorage()){
if(be.isStorage()){
if(!be.isStorage()||(be.isStorage()&&be.getForgeEnergy().getEnergyStored()<getForgeEnergy().getEnergyStored())) {
// if(be.getDistanceFromSource()>=getDistanceFromSource()) {
int amount = getForgeEnergy().extractEnergy(transferSpeed()*10, true);
int amount2 = be.getForgeEnergy().receiveEnergy(transferSpeed()*10, true);
getForgeEnergy().extractEnergy(Math.min(amount, amount2), false);
be.getForgeEnergy().receiveEnergy(Math.min(amount, amount2), false);
}
}else {
int amount = getForgeEnergy().extractEnergy(transferSpeed(), true);
int amount2 = be.getForgeEnergy().receiveEnergy(transferSpeed(), true);
//if(be.getForgeEnergy().getEnergyStored()<be.getForgeEnergy().getMaxEnergyStored()/2) {
getForgeEnergy().extractEnergy(Math.min(amount, amount2), false);
be.getForgeEnergy().receiveEnergy(Math.min(amount, amount2), false);
//}
}
}
}
//PLUH
default void useEnergy(int baseValue){
getForgeEnergy().extractEnergy(baseValue/(voltageGeneration()+1),false);
}
default TFMGForgeEnergyStorage createEnergyStorage(){
return new TFMGForgeEnergyStorage(FECapacity(), 99999) {
@Override
public void onEnergyChanged(int energyAmount,boolean setEnergy) {
if(setEnergy)
return;
gotFElastTick(1);
sendStuff();
}
};
getStorage().discharge(baseValue/(voltageGeneration()+1),false);
}
default void writeElectrity(CompoundTag compound){
compound.putInt("Voltage",getVoltage());
compound.putInt("Current",getCurrent());
compound.putDouble("Voltage",getVoltage());
compound.putDouble("Current",getCurrent());
compound.putInt("DistanceFromSource",getDistanceFromSource());
compound.putInt("ForgeEnergy", getForgeEnergy().getEnergyStored());
//compound.putInt("ForgeEnergy", getForgeEnergy().getEnergyStored());
}
}

View File

@@ -3,21 +3,13 @@ package com.drmangotea.createindustry.blocks.electricity.base;
import com.drmangotea.createindustry.base.util.TFMGUtils;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.ChatFormatting;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.IEnergyStorage;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable;

View File

@@ -1,51 +0,0 @@
package com.drmangotea.createindustry.blocks.electricity.base;
import net.minecraftforge.energy.EnergyStorage;
public abstract class TFMGForgeEnergyStorage extends EnergyStorage {
public TFMGForgeEnergyStorage(int capacity, int maxTransfer) {
super(capacity, maxTransfer);
}
@Override
public int extractEnergy(int maxExtract, boolean simulate) {
int extractedEnergy = super.extractEnergy(maxExtract, simulate);
if(extractedEnergy != 0) {
onEnergyChanged(maxExtract*-1,false);
}
return extractedEnergy;
}
@Override
public int receiveEnergy(int maxReceive, boolean simulate) {
int receiveEnergy = super.receiveEnergy(maxReceive, simulate);
if(receiveEnergy != 0) {
onEnergyChanged(receiveEnergy,false);
}
return receiveEnergy;
}
public int setEnergy(int energy) {
this.energy = energy;
if(energy>0)
onEnergyChanged(energy,true);
return 0;
}
public abstract void onEnergyChanged(int amount, boolean setEnergy);
}

View File

@@ -1,18 +1,14 @@
package com.drmangotea.createindustry.blocks.electricity.base.cables;
import com.drmangotea.createindustry.CreateTFMG;
import com.drmangotea.createindustry.base.TFMGTools;
import com.drmangotea.createindustry.blocks.electricity.base.*;
import com.drmangotea.createindustry.blocks.electricity.resistors.ResistorBlockEntity;
import com.drmangotea.createindustry.registry.TFMGItems;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
@@ -21,8 +17,6 @@ import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.energy.EnergyStorage;
import java.util.ArrayList;
import java.util.List;
@@ -223,8 +217,7 @@ public class CableConnectorBlockEntity extends ElectricBlockEntity {
}else
if(be1!=null) {
} else if(be1!=null) {
if (be1.getCapability(ForgeCapabilities.ENERGY, direction.getOpposite()).isPresent()) {

View File

@@ -1,27 +1,19 @@
package com.drmangotea.createindustry.blocks.electricity.base.cables;
import com.drmangotea.createindustry.blocks.electricity.base.IHaveCables;
import com.drmangotea.createindustry.items.weapons.advanced_potato_cannon.AdvancedPotatoCannonItemRenderer;
import com.drmangotea.createindustry.registry.TFMGItems;
import com.simibubi.create.foundation.item.render.SimpleCustomRenderer;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import java.util.function.Consumer;
public class WireItem extends Item {

View File

@@ -1,11 +1,8 @@
package com.drmangotea.createindustry.blocks.electricity.base.cables.test;
import com.drmangotea.createindustry.blocks.electricity.base.TFMGForgeEnergyStorage;
public class ElectricalNetworkMember {
public int voltage;
public TFMGForgeEnergyStorage energy;
}

View File

@@ -1,13 +1,11 @@
package com.drmangotea.createindustry.blocks.electricity.cable_blocks;
import com.drmangotea.createindustry.blocks.electricity.base.ElectricBlockEntity;
import com.drmangotea.createindustry.blocks.electricity.base.IElectricBlock;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import java.util.ArrayList;

View File

@@ -3,8 +3,8 @@ package com.drmangotea.createindustry.blocks.electricity.cable_blocks.copycat_ca
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.decoration.copycat.CopycatBlock;
import com.simibubi.create.content.decoration.copycat.FilteredBlockAndTintGetter;
import com.simibubi.create.foundation.model.BakedModelWrapperWithData;
import com.simibubi.create.foundation.utility.Iterate;
import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.model.BakedQuad;
@@ -16,14 +16,12 @@ import net.minecraft.util.RandomSource;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.client.model.data.ModelData;
import net.minecraftforge.client.model.data.ModelProperty;
import javax.annotation.Nullable;
import java.util.Collections;
import java.util.List;
public abstract class AbstractCopycatCableModel extends BakedModelWrapperWithData {
public abstract class AbstractCopycatCableModel extends ForwardingBakedModel {
public static final ModelProperty<BlockState> MATERIAL_PROPERTY = new ModelProperty<>();
private static final ModelProperty<OcclusionData> OCCLUSION_PROPERTY = new ModelProperty<>();

View File

@@ -7,6 +7,9 @@ import com.simibubi.create.AllTags;
import com.simibubi.create.content.decoration.copycat.CopycatModel;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.foundation.block.IBE;
import io.github.fabricators_of_create.porting_lib.block.CustomSoundTypeBlock;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.Minecraft;
import net.minecraft.client.color.block.BlockColor;
import net.minecraft.core.BlockPos;
@@ -33,13 +36,10 @@ import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.model.data.ModelDataManager;
import javax.annotation.Nullable;
public class CopycatCableBlock extends Block implements IBE<CopycatCableBlockEntity>, IWrenchable {
public class CopycatCableBlock extends Block implements IBE<CopycatCableBlockEntity>, IWrenchable, CustomSoundTypeBlock {
public CopycatCableBlock(Properties pProperties) {
super(pProperties);
@@ -232,7 +232,7 @@ public class CopycatCableBlock extends Block implements IBE<CopycatCableBlockEnt
// Connected Textures
@Override
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
public BlockState getAppearance(BlockState state, BlockAndTintGetter level, BlockPos pos, Direction side,
BlockState queryState, BlockPos queryPos) {
@@ -348,12 +348,12 @@ public class CopycatCableBlock extends Block implements IBE<CopycatCableBlockEnt
//
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
public static BlockColor wrappedColor() {
return new WrappedBlockColor();
}
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
public static class WrappedBlockColor implements BlockColor {
@Override

View File

@@ -2,7 +2,6 @@ package com.drmangotea.createindustry.blocks.electricity.cable_blocks.copycat_ca
import com.drmangotea.createindustry.base.util.TFMGUtils;
import com.drmangotea.createindustry.blocks.electricity.base.IElectricBlock;
import com.drmangotea.createindustry.blocks.electricity.base.TFMGForgeEnergyStorage;
import com.simibubi.create.content.decoration.copycat.CopycatBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import net.minecraft.core.BlockPos;
@@ -10,10 +9,6 @@ import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.IEnergyStorage;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable;

View File

@@ -1,10 +1,13 @@
package com.drmangotea.createindustry.blocks.electricity.cable_blocks.copycat_cable_block;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.decoration.copycat.CopycatModel;
import com.simibubi.create.content.decoration.copycat.CopycatSpecialCases;
import com.simibubi.create.foundation.model.BakedModelHelper;
import com.simibubi.create.foundation.model.BakedQuadHelper;
import com.simibubi.create.foundation.utility.Iterate;
import io.github.fabricators_of_create.porting_lib.model.data.ModelData;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
@@ -13,16 +16,17 @@ import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.DirectionalBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.client.model.data.ModelData;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
public class CopycatCableBlockModel extends com.simibubi.create.content.decoration.copycat.CopycatModel {
public class CopycatCableBlockModel extends CopycatModel {
protected static final AABB CUBE_AABB = new AABB(BlockPos.ZERO);
@@ -30,6 +34,11 @@ public class CopycatCableBlockModel extends com.simibubi.create.content.decorati
super(originalModel);
}
@Override
protected void emitBlockQuadsInner(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier<RandomSource> randomSupplier, RenderContext context, BlockState material, CullFaceRemovalData cullFaceRemovalData, OcclusionData occlusionData) {
}
@Override
protected List<BakedQuad> getCroppedQuads(BlockState state, Direction side, RandomSource rand, BlockState material,
ModelData wrappedData, RenderType renderType) {

View File

@@ -2,7 +2,6 @@ package com.drmangotea.createindustry.blocks.electricity.electric_motor;
import com.drmangotea.createindustry.base.util.TFMGUtils;
import com.drmangotea.createindustry.blocks.electricity.base.IElectricBlock;
import com.drmangotea.createindustry.blocks.electricity.base.TFMGForgeEnergyStorage;
import com.drmangotea.createindustry.registry.TFMGBlocks;
import com.jozufozu.flywheel.util.transform.TransformStack;
import com.mojang.blaze3d.vertex.PoseStack;
@@ -15,19 +14,13 @@ import com.simibubi.create.foundation.blockEntity.behaviour.scrollValue.ScrollVa
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.IEnergyStorage;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable;

View File

@@ -4,7 +4,6 @@ import com.drmangotea.createindustry.base.util.TFMGUtils;
import com.drmangotea.createindustry.blocks.electricity.base.ElectricBlockEntity;
import com.drmangotea.createindustry.registry.TFMGItems;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
import com.simibubi.create.foundation.item.ItemHelper;
import com.simibubi.create.foundation.item.SmartInventory;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.ChatFormatting;
@@ -15,15 +14,9 @@ import net.minecraft.network.chat.Component;
import net.minecraft.world.Containers;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import javax.annotation.Nonnull;

View File

@@ -1,6 +1,5 @@
package com.drmangotea.createindustry.blocks.electricity.voltmeter.energy_meter;
import com.drmangotea.createindustry.blocks.electricity.base.IElectricBlock;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
@@ -14,8 +13,6 @@ import net.minecraft.network.chat.Component;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.energy.EnergyStorage;
import java.util.List;

View File

@@ -13,6 +13,11 @@ import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@@ -28,25 +33,15 @@ import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidTank;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Optional;
@SuppressWarnings("removal")
public class CompactEngineBlockEntity extends GeneratingKineticBlockEntity implements IHaveGoggleInformation, IWrenchable {
protected LazyOptional<IFluidHandler> fluidCapability;
protected LazyOptional<CombinedTankWrapper> fluidCapability;
protected FluidTank tankInventory;
protected FluidTank lubricationOilTank;
@@ -89,9 +84,7 @@ public class CompactEngineBlockEntity extends GeneratingKineticBlockEntity imple
//fluidCapability = LazyOptional.of(() -> tankInventory);
fluidCapability = LazyOptional.of(() -> {
return new CombinedTankWrapper(tankInventory,lubricationOilTank,coolantTank );
});
fluidCapability = LazyOptional.of(() -> new CombinedTankWrapper(tankInventory,lubricationOilTank,coolantTank ));
signal = 0;
setLazyTickRate(40);
@@ -362,7 +355,7 @@ public void write(CompoundTag compound, boolean clientPacket) {
int random2 = Create.RANDOM.nextInt(200);
if(random1 == 69)
coolantTank.drain(1, IFluidHandler.FluidAction.EXECUTE);
coolantTank.extract(1, IFluidHandler.FluidAction.EXECUTE);
if(random2 == 69)
lubricationOilTank.drain(1, IFluidHandler.FluidAction.EXECUTE);
@@ -449,7 +442,7 @@ public void write(CompoundTag compound, boolean clientPacket) {
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
private void makeSound(){
soundTimer=0;
@@ -458,6 +451,7 @@ public void write(CompoundTag compound, boolean clientPacket) {
}
public boolean playerInteract(Player pPlayer, InteractionHand pHand) {
ItemStack stack = pPlayer.getItemInHand(pHand);
@@ -516,17 +510,6 @@ public void write(CompoundTag compound, boolean clientPacket) {
return (float) tankInventory.getFluidAmount() / tankInventory.getCapacity();
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
if (cap == ForgeCapabilities.FLUID_HANDLER)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
public void invalidate() {
super.invalidate();
@@ -535,7 +518,7 @@ public void write(CompoundTag compound, boolean clientPacket) {
public IFluidTank getTankInventory() {
public FluidTank getTankInventory() {
return tankInventory;
}

View File

@@ -6,7 +6,6 @@ import com.drmangotea.createindustry.registry.TFMGBlocks;
import com.drmangotea.createindustry.registry.TFMGFluids;
import com.drmangotea.createindustry.registry.TFMGSoundEvents;
import com.drmangotea.createindustry.registry.TFMGTags;
import com.simibubi.create.content.contraptions.bearing.WindmillBearingBlockEntity;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity;
import com.simibubi.create.content.kinetics.base.IRotate;
@@ -14,14 +13,18 @@ import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer;
import com.simibubi.create.content.kinetics.belt.behaviour.DirectBeltInputBehaviour;
import com.simibubi.create.content.kinetics.steamEngine.PoweredShaftBlockEntity;
import com.simibubi.create.content.kinetics.steamEngine.SteamEngineBlock;
import com.simibubi.create.content.kinetics.steamEngine.SteamEngineValueBox;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.blockEntity.behaviour.scrollValue.ScrollOptionBehaviour;
import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.*;
import mekanism.common.recipe.lookup.cache.type.FluidInputCache;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@@ -36,15 +39,6 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.AttachFace;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import net.minecraftforge.fml.DistExecutor;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -52,6 +46,7 @@ import java.lang.ref.WeakReference;
import java.util.List;
import java.util.Optional;
import static com.drmangotea.createindustry.base.util.TFMGUtils.fill;
import static com.drmangotea.createindustry.blocks.engines.diesel.DieselEngineBlock.FACE;
import static net.minecraft.world.level.block.HorizontalDirectionalBlock.FACING;
@@ -341,15 +336,15 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
fuelModifier = 1;
fuelTank.setFluid(new FluidStack(TFMGFluids.DIESEL.getSource(),fuelTank.getFluidAmount()-(2-fuelModifier)));
fuelTank.setFluid(new FluidStack(FluidVariant.of(TFMGFluids.DIESEL.getSource()),fuelTank.getFluidAmount()-(2-fuelModifier)));
}
//airTank.drain(1, IFluidHandler.FluidAction.EXECUTE);
if(!airTank.isEmpty()) {
airTank.setFluid(new FluidStack(TFMGFluids.AIR.getSource(), airTank.getFluidAmount() - 5));
}else expansionBE.airTank.setFluid(new FluidStack(TFMGFluids.AIR.getSource(), expansionBE.airTank.getFluidAmount() - 5));
exhaustTank.fill(new FluidStack(TFMGFluids.CARBON_DIOXIDE.getSource(),3), IFluidHandler.FluidAction.EXECUTE);
airTank.setFluid(new FluidStack(FluidVariant.of(TFMGFluids.AIR.getSource()), airTank.getFluidAmount() - 5));
}else expansionBE.airTank.setFluid(new FluidStack(FluidVariant.of(TFMGFluids.AIR.getSource()), expansionBE.airTank.getFluidAmount() - 5));
fill(exhaustTank, new FluidStack(FluidVariant.of(TFMGFluids.CARBON_DIOXIDE.getSource()),3));
//tanks.get(false).setFluid(new FluidStack(TFMGFluids.CARBON_DIOXIDE.getSource(), tanks.get(false).getFluidAmount()+1));
@@ -360,12 +355,12 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
if (!expansionBE.coolantTank.isEmpty()){
strengthModifier +=3;
if(consumptionTimer>5)
expansionBE.coolantTank.setFluid(new FluidStack(TFMGFluids.COOLING_FLUID.getSource(), expansionBE.coolantTank.getFluidAmount() - 1));
expansionBE.coolantTank.setFluid(new FluidStack(FluidVariant.of(TFMGFluids.COOLING_FLUID.getSource()), expansionBE.coolantTank.getFluidAmount() - 1));
}
if (!expansionBE.lubricationOilTank.isEmpty()){
strengthModifier +=5;
if(consumptionTimer>5)
expansionBE.lubricationOilTank.setFluid(new FluidStack(TFMGFluids.LUBRICATION_OIL.getSource(), expansionBE.lubricationOilTank.getFluidAmount() - 1));
expansionBE.lubricationOilTank.setFluid(new FluidStack(FluidVariant.of(TFMGFluids.LUBRICATION_OIL.getSource()), expansionBE.lubricationOilTank.getFluidAmount() - 1));
}
}
@@ -398,7 +393,7 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
}
@Override
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
protected AABB createRenderBoundingBox() {
return super.createRenderBoundingBox().inflate(2);
}
@@ -423,7 +418,7 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
@Nullable
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
public Float getTargetAngle() {
float angle = 0;
BlockState blockState = getBlockState();
@@ -492,16 +487,6 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
fluidCapability.invalidate();
}
@Nonnull
@Override
@SuppressWarnings("removal")
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) {
if (cap == ForgeCapabilities.FLUID_HANDLER)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
public void notifyUpdate() {
super.notifyUpdate();
@@ -535,13 +520,13 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
//--Fluid Info--//
LazyOptional<IFluidHandler> handler = this.getCapability(ForgeCapabilities.FLUID_HANDLER);
Optional<IFluidHandler> resolve = handler.resolve();
LazyOptional<CombinedTankWrapper> handler = fluidCapability;
Optional<CombinedTankWrapper> resolve = handler.resolve();
if (!resolve.isPresent())
return false;
IFluidHandler tank = resolve.get();
if (tank.getTanks() == 0)
CombinedTankWrapper tanks = resolve.get();
if (tanks.parts.isEmpty())
return false;
LangBuilder mb = Lang.translate("generic.unit.millibuckets");
@@ -550,8 +535,9 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
.forGoggles(tooltip);
boolean isEmpty = true;
for (int i = 0; i < tank.getTanks(); i++) {
FluidStack fluidStack = tank.getFluidInTank(i);
for (int i = 0; i < tanks.parts.size(); i++) {
Storage<FluidVariant> tank = tanks.parts.get(i);
FluidStack fluidStack = tank.iterator();
if (fluidStack.isEmpty())
continue;
@@ -564,7 +550,7 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
.add(mb)
.style(ChatFormatting.DARK_GREEN))
.text(ChatFormatting.GRAY, " / ")
.add(Lang.number(tank.getTankCapacity(i))
.add(Lang.number(tanks.getTankCapacity(i))
.add(mb)
.style(ChatFormatting.DARK_GRAY))
.forGoggles(tooltip, 1);
@@ -572,7 +558,7 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
isEmpty = false;
}
if (tank.getTanks() > 1) {
if (tanks.getTanks() > 1) {
if (isEmpty)
tooltip.remove(tooltip.size() - 1);
return true;
@@ -582,7 +568,7 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
return true;
Lang.translate("gui.goggles.fluid_container.capacity")
.add(Lang.number(tank.getTankCapacity(0))
.add(Lang.number(tanks.getTankCapacity(0))
.add(mb)
.style(ChatFormatting.DARK_GREEN))
.style(ChatFormatting.DARK_GRAY)

View File

@@ -3,7 +3,6 @@ package com.drmangotea.createindustry.blocks.engines.diesel.engine_expansion;
import com.drmangotea.createindustry.registry.TFMGBlockEntities;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.foundation.block.IBE;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import net.minecraft.core.Direction;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.block.Block;
@@ -11,9 +10,6 @@ import net.minecraft.world.level.block.DirectionalBlock;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.material.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.templates.FluidTank;
public class DieselEngineExpansionBlock extends DirectionalBlock implements IBE<DieselEngineExpansionBlockEntity>, IWrenchable {

View File

@@ -8,6 +8,12 @@ import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
import net.fabricmc.fabric.api.transfer.v1.storage.StorageView;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@@ -16,12 +22,6 @@ import net.minecraft.network.chat.Component;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -30,7 +30,7 @@ import java.util.Optional;
public class DieselEngineExpansionBlockEntity extends SmartBlockEntity implements IHaveGoggleInformation {
protected LazyOptional<IFluidHandler> fluidCapability;
protected LazyOptional<CombinedTankWrapper> fluidCapability;
public FluidTank coolantTank;
public FluidTank lubricationOilTank;
public FluidTank airTank;
@@ -50,16 +50,6 @@ public class DieselEngineExpansionBlockEntity extends SmartBlockEntity implement
}
@Nonnull
@Override
@SuppressWarnings("removal")
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
public void invalidate() {
super.invalidate();
@@ -108,17 +98,14 @@ public class DieselEngineExpansionBlockEntity extends SmartBlockEntity implement
@Override
@SuppressWarnings("removal")
public boolean addToGoggleTooltip(List<Component> tooltip, boolean isPlayerSneaking) {
//--Fluid Info--//
LazyOptional<IFluidHandler> handler = this.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY);
Optional<IFluidHandler> resolve = handler.resolve();
LazyOptional<CombinedTankWrapper> handler = this.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY);
Optional<CombinedTankWrapper> resolve = handler.resolve();
if (!resolve.isPresent())
return false;
IFluidHandler tank = resolve.get();
if (tank.getTanks() == 0)
CombinedTankWrapper tanks = resolve.get();
if (tanks.parts.isEmpty())
return false;
LangBuilder mb = Lang.translate("generic.unit.millibuckets");
@@ -127,8 +114,9 @@ public class DieselEngineExpansionBlockEntity extends SmartBlockEntity implement
.forGoggles(tooltip);
boolean isEmpty = true;
for (int i = 0; i < tank.getTanks(); i++) {
FluidStack fluidStack = tank.getFluidInTank(i);
for (int i = 0; i < tanks.parts.size(); i++) {
Storage<FluidVariant> tank = tanks.parts.get(i);
FluidStack fluidStack = tank;
if (fluidStack.isEmpty())
continue;
@@ -141,7 +129,7 @@ public class DieselEngineExpansionBlockEntity extends SmartBlockEntity implement
.add(mb)
.style(ChatFormatting.DARK_GREEN))
.text(ChatFormatting.GRAY, " / ")
.add(Lang.number(tank.getTankCapacity(i))
.add(Lang.number(tanks.getTankCapacity(i))
.add(mb)
.style(ChatFormatting.DARK_GRAY))
.forGoggles(tooltip, 1);
@@ -149,7 +137,7 @@ public class DieselEngineExpansionBlockEntity extends SmartBlockEntity implement
isEmpty = false;
}
if (tank.getTanks() > 1) {
if (tanks.getTanks() > 1) {
if (isEmpty)
tooltip.remove(tooltip.size() - 1);
return true;
@@ -159,7 +147,7 @@ public class DieselEngineExpansionBlockEntity extends SmartBlockEntity implement
return true;
Lang.translate("gui.goggles.fluid_container.capacity")
.add(Lang.number(tank.getTankCapacity(0))
.add(Lang.number(tanks.getTankCapacity(0))
.add(mb)
.style(ChatFormatting.DARK_GREEN))
.style(ChatFormatting.DARK_GRAY)

View File

@@ -1,14 +1,16 @@
package com.drmangotea.createindustry.blocks.engines.intake;
import com.drmangotea.createindustry.registry.TFMGBlocks;
import com.drmangotea.createindustry.registry.TFMGFluids;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@@ -19,19 +21,11 @@ import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
import static com.drmangotea.createindustry.blocks.engines.intake.AirIntakeBlock.INVISIBLE;
import static com.simibubi.create.content.kinetics.base.DirectionalKineticBlock.FACING;
@@ -58,7 +52,7 @@ public class AirIntakeBlockEntity extends KineticBlockEntity implements IWrencha
public LerpedFloat visual_angle = LerpedFloat.angular();
protected FluidTank tankInventory;
protected LazyOptional<IFluidHandler> fluidCapability;
protected LazyOptional<FluidTank> fluidCapability;
@@ -79,7 +73,7 @@ public class AirIntakeBlockEntity extends KineticBlockEntity implements IWrencha
int production = ((int) maxShaftSpeed * ((diameter * diameter))) / 10;
if (tankInventory.getFluidAmount() + production <= tankInventory.getCapacity()) {
//tankInventory.fill(new FluidStack(TFMGFluids.AIR.getSource(), production), IFluidHandler.FluidAction.EXECUTE);
tankInventory.setFluid(new FluidStack(TFMGFluids.AIR.getSource(), production + tankInventory.getFluidAmount()));
tankInventory.setFluid(new FluidStack(FluidVariant.of(TFMGFluids.AIR.getSource()), production + tankInventory.getFluidAmount()));
// if(controller!=null) {
// ((AirIntakeBlockEntity) level.getBlockEntity(controller)).setChanged();
// ((AirIntakeBlockEntity) level.getBlockEntity(controller)).sendData();
@@ -237,30 +231,9 @@ public class AirIntakeBlockEntity extends KineticBlockEntity implements IWrencha
}
@Nonnull
@Override
@SuppressWarnings("removal")
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) {
if (!fluidCapability.isPresent()) {
refreshCapability();
sendData();
setChanged();
}
if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
private void refreshCapability() {
IFluidHandler handlerForCapability;
FluidTank handlerForCapability;
if (controller == null || controller == this.getBlockPos()
@@ -272,8 +245,8 @@ public class AirIntakeBlockEntity extends KineticBlockEntity implements IWrencha
}else handlerForCapability = tankInventory;
LazyOptional<IFluidHandler> oldCap = fluidCapability;
IFluidHandler finalHandlerForCapability = handlerForCapability;
LazyOptional<FluidTank> oldCap = fluidCapability;
FluidTank finalHandlerForCapability = handlerForCapability;
fluidCapability = LazyOptional.of(() -> finalHandlerForCapability);
//oldCap.invalidate();
}

View File

@@ -12,6 +12,11 @@ import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@@ -26,25 +31,15 @@ import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidTank;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Optional;
@SuppressWarnings("removal")
public class LowGradeFuelEngineBlockEntity extends GeneratingKineticBlockEntity implements IHaveGoggleInformation, IWrenchable {
protected LazyOptional<IFluidHandler> fluidCapability;
protected LazyOptional<CombinedTankWrapper> fluidCapability;
protected FluidTank tankInventory;
protected FluidTank lubricationOilTank;
@@ -87,9 +82,7 @@ boolean signalChanged;
//fluidCapability = LazyOptional.of(() -> tankInventory);
fluidCapability = LazyOptional.of(() -> {
return new CombinedTankWrapper(tankInventory,lubricationOilTank,coolantTank );
});
fluidCapability = LazyOptional.of(() -> new CombinedTankWrapper(tankInventory,lubricationOilTank,coolantTank ));
signal = 0;
setLazyTickRate(40);
@@ -443,7 +436,7 @@ public void write(CompoundTag compound, boolean clientPacket) {
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
private void makeSound(){
soundTimer=0;
@@ -499,28 +492,10 @@ public void write(CompoundTag compound, boolean clientPacket) {
protected void onFluidStackChanged(FluidStack newFluidStack) {}
public float getFillState() {
return (float) tankInventory.getFluidAmount() / tankInventory.getCapacity();
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
public void invalidate() {
super.invalidate();
@@ -529,7 +504,7 @@ public void write(CompoundTag compound, boolean clientPacket) {
public IFluidTank getTankInventory() {
public FluidTank getTankInventory() {
return tankInventory;
}

View File

@@ -2,7 +2,6 @@ package com.drmangotea.createindustry.blocks.engines.radial;
import com.drmangotea.createindustry.CreateTFMG;
import com.drmangotea.createindustry.blocks.engines.radial.input.RadialEngineInputBlockEntity;
import com.drmangotea.createindustry.registry.TFMGBlocks;
import com.drmangotea.createindustry.registry.TFMGFluids;
@@ -18,6 +17,11 @@ import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@@ -31,27 +35,18 @@ import net.minecraft.world.level.block.DirectionalBlock;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidTank;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import static net.minecraft.world.level.block.DirectionalBlock.FACING;
@SuppressWarnings("removal")
public class RadialEngineBlockEntity extends GeneratingKineticBlockEntity implements IHaveGoggleInformation, IWrenchable {
public LazyOptional<IFluidHandler> fluidCapability;
public LazyOptional<CombinedTankWrapper> fluidCapability;
protected FluidTank tankInventory;
protected FluidTank lubricationOilTank;
@@ -100,9 +95,7 @@ public class RadialEngineBlockEntity extends GeneratingKineticBlockEntity implem
//fluidCapability = LazyOptional.of(() -> tankInventory);
fluidCapability = LazyOptional.of(() -> {
return new CombinedTankWrapper(tankInventory,lubricationOilTank,coolantTank );
});
fluidCapability = LazyOptional.of(() -> new CombinedTankWrapper(tankInventory,lubricationOilTank,coolantTank ));
signal = 0;
setLazyTickRate(40);
@@ -559,7 +552,7 @@ public void write(CompoundTag compound, boolean clientPacket) {
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
private void makeSound(){
soundTimer=0;
@@ -612,16 +605,6 @@ public void write(CompoundTag compound, boolean clientPacket) {
return (float) tankInventory.getFluidAmount() / tankInventory.getCapacity();
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
//if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
// return fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
public void invalidate() {
super.invalidate();
@@ -630,7 +613,7 @@ public void write(CompoundTag compound, boolean clientPacket) {
public IFluidTank getTankInventory() {
public FluidTank getTankInventory() {
return tankInventory;
}

View File

@@ -1,7 +1,6 @@
package com.drmangotea.createindustry.blocks.engines.radial.input;
import com.drmangotea.createindustry.CreateTFMG;
import com.drmangotea.createindustry.blocks.engines.radial.RadialEngineBlockEntity;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
@@ -11,9 +10,6 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import javax.annotation.Nonnull;
import java.util.List;
@@ -78,18 +74,6 @@ public class RadialEngineInputBlockEntity extends SmartBlockEntity {
signal = newSignal;
}
@Nonnull
@Override
@SuppressWarnings("'net.minecraftforge.items.CapabilityItemHandler' is deprecated and marked for removal ")
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) {
if(engine!=null)
if(side == this.getBlockState().getValue(FACING))
if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
return engine.fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
public void write(CompoundTag compound, boolean clientPacket) {
compound.putInt("Signal", signal);

View File

@@ -1,14 +1,12 @@
package com.drmangotea.createindustry.blocks.engines.radial.large;
import com.drmangotea.createindustry.blocks.engines.radial.RadialEngineBlockEntity;
import com.drmangotea.createindustry.registry.TFMGFluids;
import com.drmangotea.createindustry.registry.TFMGTags;
import net.minecraft.core.BlockPos;
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraftforge.fluids.capability.IFluidHandler;
public class LargeRadialEngineBlockEntity extends RadialEngineBlockEntity {
public LargeRadialEngineBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {

View File

@@ -15,6 +15,11 @@ import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@@ -28,27 +33,17 @@ import net.minecraft.world.level.block.DirectionalBlock;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidTank;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Optional;
import static com.simibubi.create.content.kinetics.base.DirectionalKineticBlock.FACING;
@SuppressWarnings("removal")
public abstract class AbstractEngineBlockEntity extends GeneratingKineticBlockEntity implements IHaveGoggleInformation, IWrenchable {
protected LazyOptional<IFluidHandler> fluidCapability;
protected LazyOptional<FluidTank> fluidCapability;
protected FluidTank tankInventory;
protected FluidTank lubricationOilTank;
@@ -540,7 +535,7 @@ public void write(CompoundTag compound, boolean clientPacket) {
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
private void makeSound(){
soundTimer=0;
if(this instanceof TurbineEngineTileEntity){
@@ -610,17 +605,6 @@ public void write(CompoundTag compound, boolean clientPacket) {
return (float) tankInventory.getFluidAmount() / tankInventory.getCapacity();
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
if (cap == ForgeCapabilities.FLUID_HANDLER)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
public void invalidate() {
super.invalidate();
@@ -629,7 +613,7 @@ public void write(CompoundTag compound, boolean clientPacket) {
public IFluidTank getTankInventory() {
public FluidTank getTankInventory() {
return tankInventory;
}

View File

@@ -8,6 +8,9 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@@ -17,26 +20,18 @@ import net.minecraft.world.level.block.DirectionalBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidTank;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Optional;
public class EngineBackBlockEntity extends SmartBlockEntity implements IHaveGoggleInformation {
public class EngineBackBlockEntity extends SmartBlockEntity implements IHaveGoggleInformation {
public int consumptionTimer=0;
protected LazyOptional<IFluidHandler> fluidCapability;
protected LazyOptional<FluidTank> fluidCapability;
public FluidTank tankInventory;
@@ -197,12 +192,12 @@ import java.util.Optional;
private void refreshCapability() {
LazyOptional<IFluidHandler> oldCap = fluidCapability;
LazyOptional<FluidTank> oldCap = fluidCapability;
fluidCapability = LazyOptional.of(() -> handlerForCapability());
oldCap.invalidate();
}
private IFluidHandler handlerForCapability() {
private FluidTank handlerForCapability() {
return tankInventory;
}
@@ -231,24 +226,12 @@ import java.util.Optional;
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
if (!fluidCapability.isPresent())
refreshCapability();
if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
}
public IFluidTank getTankInventory() {
public FluidTank getTankInventory() {
return tankInventory;
}

View File

@@ -1,18 +1,18 @@
package com.drmangotea.createindustry.blocks.fluids;
import com.tterrag.registrate.fabric.SimpleFlowableFluid;
import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.FluidState;
import net.minecraftforge.fluids.ForgeFlowingFluid;
/**
* makes fluid burn when close to fire,
* not working for now
*/
public class FlammableFluid extends ForgeFlowingFluid {
public class FlammableFluid extends SimpleFlowableFluid {
protected FlammableFluid(Properties properties) {

View File

@@ -13,7 +13,6 @@ import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.fluids.FluidStack;
import java.util.function.Supplier;

View File

@@ -9,6 +9,11 @@ import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.Couple;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@@ -16,13 +21,9 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
import javax.annotation.Nonnull;
import java.security.DrbgParameters;
import java.util.List;
import java.util.Optional;
@@ -32,7 +33,7 @@ public class TFMGMachineBlockEntity extends SmartBlockEntity implements IHaveGo
private boolean contentsChanged;
protected LazyOptional<IFluidHandler> fluidCapability;
protected LazyOptional<CombinedTankWrapper> fluidCapability;
public TFMGMachineBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
@@ -41,7 +42,17 @@ public class TFMGMachineBlockEntity extends SmartBlockEntity implements IHaveGo
contentsChanged = true;
}
// im like 90% sure we dont need this
// @Nonnull
// @Override
// public <T> LazyOptional<T> getCapability(@Nonnull DrbgParameters.Capability<T> cap, Direction side) {
//
//
//
// if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
// return fluidCapability.cast();
// return super.getCapability(cap, side);
// }
@Override
@@ -58,13 +69,10 @@ public class TFMGMachineBlockEntity extends SmartBlockEntity implements IHaveGo
behaviours.add(tank1);
behaviours.add(tank2);
fluidCapability = LazyOptional.of(() -> {
LazyOptional<? extends IFluidHandler> inputCap = tank1.getCapability();
LazyOptional<? extends IFluidHandler> outputCap = tank2.getCapability();
return new CombinedTankWrapper(outputCap.orElse(null), inputCap.orElse(null));
Storage<FluidVariant> inputCap = tank1.getCapability();
Storage<FluidVariant> outputCap = tank2.getCapability();
return new CombinedTankWrapper(outputCap, inputCap);
});
@@ -79,16 +87,8 @@ public class TFMGMachineBlockEntity extends SmartBlockEntity implements IHaveGo
fluidCapability.invalidate();
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) {
if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
public void notifyUpdate() {
super.notifyUpdate();

View File

@@ -2,13 +2,15 @@ package com.drmangotea.createindustry.blocks.machines.exhaust;
import com.drmangotea.createindustry.registry.TFMGFluids;
import com.simibubi.create.Create;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@@ -16,13 +18,6 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidTank;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -34,7 +29,7 @@ public class ExhaustBlockEntity extends SmartBlockEntity implements IHaveGoggleI
protected LazyOptional<IFluidHandler> fluidCapability;
protected LazyOptional<FluidTank> fluidCapability;
public FluidTank tankInventory;
public boolean spawnsSmoke=false;
@@ -61,12 +56,12 @@ public class ExhaustBlockEntity extends SmartBlockEntity implements IHaveGoggleI
LangBuilder mb = Lang.translate("generic.unit.millibuckets");
/////////
LazyOptional<IFluidHandler> handler = this.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY);
Optional<IFluidHandler> resolve = handler.resolve();
LazyOptional<FluidTank> handler = this.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY);
Optional<FluidTank> resolve = handler.resolve();
if (!resolve.isPresent())
return false;
IFluidHandler tank = resolve.get();
FluidTank tank = resolve.get();
if (tank.getTanks() == 0)
return false;
@@ -210,13 +205,12 @@ public class ExhaustBlockEntity extends SmartBlockEntity implements IHaveGoggleI
private void refreshCapability() {
LazyOptional<IFluidHandler> oldCap = fluidCapability;
LazyOptional<FluidTank> oldCap = fluidCapability;
fluidCapability = LazyOptional.of(() -> handlerForCapability());
oldCap.invalidate();
}
private IFluidHandler handlerForCapability() {
private FluidTank handlerForCapability() {
return tankInventory;
}
@@ -244,24 +238,12 @@ public class ExhaustBlockEntity extends SmartBlockEntity implements IHaveGoggleI
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
if (!fluidCapability.isPresent())
refreshCapability();
if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
}
public IFluidTank getTankInventory() {
public FluidTank getTankInventory() {
return tankInventory;
}

View File

@@ -1,34 +1,20 @@
package com.drmangotea.createindustry.blocks.machines.firebox;
import com.drmangotea.createindustry.registry.TFMGBlockEntities;
import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllShapes;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.content.processing.basin.BasinBlockEntity;
import com.simibubi.create.content.processing.burner.BlazeBurnerBlock;
import com.simibubi.create.content.processing.burner.BlazeBurnerBlockItem;
import com.simibubi.create.foundation.block.IBE;
import com.simibubi.create.foundation.utility.Lang;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.advancements.critereon.StatePropertiesPredicate;
import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.StringRepresentable;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.FlintAndSteelItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.HorizontalDirectionalBlock;
@@ -38,19 +24,6 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition.Builder;
import net.minecraft.world.level.block.state.properties.EnumProperty;
import net.minecraft.world.level.pathfinder.PathComputationType;
import net.minecraft.world.level.storage.loot.LootPool;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.entries.LootItem;
import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition;
import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition;
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.util.FakePlayer;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
@@ -136,7 +109,7 @@ public class FireboxBlock extends HorizontalDirectionalBlock implements IBE<Fire
return false;
}
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
public void animateTick(BlockState state, Level world, BlockPos pos, Random random) {
if (random.nextInt(10) != 0)
return;

View File

@@ -1,43 +1,26 @@
package com.drmangotea.createindustry.blocks.machines.firebox;
import com.drmangotea.createindustry.registry.TFMGFluids;
import com.drmangotea.createindustry.registry.TFMGTags;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllTags.AllItemTags;
import com.simibubi.create.content.fluids.tank.FluidTankBlock;
import com.simibubi.create.content.processing.burner.BlazeBurnerBlock.HeatLevel;
import com.simibubi.create.content.processing.burner.BlazeBurnerBlockEntity;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -51,7 +34,7 @@ public class FireboxBlockEntity extends SmartBlockEntity {
protected int remainingBurnTime;
protected LazyOptional<IFluidHandler> fluidCapability;
protected LazyOptional<FluidTank> fluidCapability;
public FluidTank tankInventory;
@@ -127,20 +110,12 @@ public class FireboxBlockEntity extends SmartBlockEntity {
super.read(compound, clientPacket);
}
private void refreshCapability() {
LazyOptional<IFluidHandler> oldCap = fluidCapability;
LazyOptional<FluidTank> oldCap = fluidCapability;
fluidCapability = LazyOptional.of(() -> handlerForCapability());
oldCap.invalidate();
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
if (!fluidCapability.isPresent())
refreshCapability();
if (cap == ForgeCapabilities.FLUID_HANDLER)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
private IFluidHandler handlerForCapability() {
private FluidTank handlerForCapability() {
return tankInventory;
}

View File

@@ -1,7 +1,6 @@
package com.drmangotea.createindustry.blocks.machines.flarestack;
import com.drmangotea.createindustry.registry.TFMGFluids;
import com.drmangotea.createindustry.registry.TFMGTags;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
@@ -9,6 +8,9 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@@ -16,13 +18,6 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidTank;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -33,7 +28,7 @@ public class FlarestackBlockEntity extends SmartBlockEntity implements IHaveGogg
protected LazyOptional<IFluidHandler> fluidCapability;
protected LazyOptional<FluidTank> fluidCapability;
public FluidTank tankInventory;
public boolean spawnsSmoke=false;
@@ -61,12 +56,12 @@ public class FlarestackBlockEntity extends SmartBlockEntity implements IHaveGogg
LangBuilder mb = Lang.translate("generic.unit.millibuckets");
/////////
LazyOptional<IFluidHandler> handler = this.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY);
Optional<IFluidHandler> resolve = handler.resolve();
LazyOptional<FluidTank> handler = this.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY);
Optional<FluidTank> resolve = handler.resolve();
if (!resolve.isPresent())
return false;
IFluidHandler tank = resolve.get();
FluidTank tank = resolve.get();
if (tank.getTanks() == 0)
return false;
@@ -205,13 +200,12 @@ public class FlarestackBlockEntity extends SmartBlockEntity implements IHaveGogg
private void refreshCapability() {
LazyOptional<IFluidHandler> oldCap = fluidCapability;
LazyOptional<FluidTank> oldCap = fluidCapability;
fluidCapability = LazyOptional.of(() -> handlerForCapability());
oldCap.invalidate();
}
private IFluidHandler handlerForCapability() {
private FluidTank handlerForCapability() {
return tankInventory;
}
@@ -239,25 +233,12 @@ public class FlarestackBlockEntity extends SmartBlockEntity implements IHaveGogg
}
@Nonnull
@Override
@SuppressWarnings("removal")
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
if (!fluidCapability.isPresent())
refreshCapability();
if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
}
public IFluidTank getTankInventory() {
public FluidTank getTankInventory() {
return tankInventory;
}

View File

@@ -1,6 +1,6 @@
package com.drmangotea.createindustry.blocks.machines.metal_processing.blast_furnace;
import com.drmangotea.createindustry.CreateTFMG;
import com.drmangotea.createindustry.base.util.CombinedStorageWrapper;
import com.drmangotea.createindustry.blocks.machines.TFMGMachineBlockEntity;
import com.drmangotea.createindustry.recipes.industrial_blasting.IndustrialBlastingRecipe;
import com.drmangotea.createindustry.registry.TFMGBlocks;
@@ -8,31 +8,30 @@ import com.drmangotea.createindustry.registry.TFMGItems;
import com.drmangotea.createindustry.registry.TFMGRecipeTypes;
import com.simibubi.create.Create;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
import com.simibubi.create.content.logistics.depot.DepotBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.item.ItemHelper;
import com.simibubi.create.foundation.item.SmartInventory;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import io.github.fabricators_of_create.porting_lib.transfer.item.ItemStackHandler;
import io.github.fabricators_of_create.porting_lib.transfer.item.RecipeWrapper;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant;
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
import net.fabricmc.fabric.api.transfer.v1.storage.base.CombinedStorage;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import net.minecraftforge.items.wrapper.RecipeWrapper;
import javax.annotation.Nonnull;
import java.util.ArrayList;
@@ -67,14 +66,12 @@ public class BlastFurnaceOutputBlockEntity extends TFMGMachineBlockEntity implem
public LerpedFloat coalCokeHeight = LerpedFloat.linear();
//item storage
public LazyOptional<IItemHandlerModifiable> itemCapability;
public LazyOptional<CombinedStorageWrapper> itemCapability;
public SmartInventory inputInventory;
public SmartInventory fuelInventory;
int debug = 0;
@@ -88,7 +85,7 @@ public class BlastFurnaceOutputBlockEntity extends TFMGMachineBlockEntity implem
fuelInventory = new SmartInventory(1, this).forbidInsertion().forbidExtraction()
.withMaxStackSize(64);
itemCapability = LazyOptional.of(() -> new CombinedInvWrapper(inputInventory,fuelInventory));
itemCapability = LazyOptional.of(() -> new CombinedStorageWrapper(inputInventory, fuelInventory));
tank1.getPrimaryHandler().setCapacity(8000);
@@ -392,16 +389,7 @@ public class BlastFurnaceOutputBlockEntity extends TFMGMachineBlockEntity implem
super.invalidate();
itemCapability.invalidate();
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) {
if (cap == ForgeCapabilities.ITEM_HANDLER)
return itemCapability.cast();
if (cap == ForgeCapabilities.FLUID_HANDLER)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
public void checkType(){
mainFloor = this.getBlockPos().relative(outputFacing.getOpposite());

View File

@@ -1,6 +1,5 @@
package com.drmangotea.createindustry.blocks.machines.metal_processing.casting_basin;
import com.drmangotea.createindustry.CreateTFMG;
import com.drmangotea.createindustry.blocks.machines.TFMGMachineBlockEntity;
import com.drmangotea.createindustry.recipes.casting.CastingRecipe;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
@@ -18,23 +17,13 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.util.StringRepresentable;
import net.minecraft.world.Container;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluids;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import javax.annotation.Nonnull;
import java.util.List;
import java.util.Optional;
import static com.drmangotea.createindustry.blocks.machines.metal_processing.casting_basin.CastingBasinBlock.MOLD_TYPE;
@@ -277,16 +266,7 @@ public class CastingBasinBlockEntity extends TFMGMachineBlockEntity implements I
super.invalidate();
itemCapability.invalidate();
}
@Nonnull
@Override
@SuppressWarnings("removal")
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) {
if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
return itemCapability.cast();
if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
protected Object getRecipeCacheKey() {
return CastingRecipesKey;
}

View File

@@ -1,25 +1,19 @@
package com.drmangotea.createindustry.blocks.machines.metal_processing.casting_spout;
import com.drmangotea.createindustry.CreateTFMG;
import com.drmangotea.createindustry.blocks.machines.TFMGMachineBlockEntity;
import com.drmangotea.createindustry.blocks.machines.metal_processing.casting_basin.CastingBasinBlockEntity;
import com.simibubi.create.content.fluids.tank.FluidTankBlockEntity;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
import java.util.List;
import java.util.Optional;
public class CastingSpoutBlockEntity extends TFMGMachineBlockEntity {

View File

@@ -5,20 +5,19 @@ import com.drmangotea.createindustry.registry.TFMGPartialModels;
import com.jozufozu.flywheel.core.PartialModel;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.foundation.blockEntity.behaviour.fluid.SmartFluidTankBehaviour;
import com.simibubi.create.foundation.blockEntity.behaviour.fluid.SmartFluidTankBehaviour.TankSegment;
import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer;
import com.simibubi.create.foundation.fluid.FluidRenderer;
import com.simibubi.create.foundation.render.CachedBufferer;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.util.Mth;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.fluids.FluidStack;
public class CastingSpoutRenderer extends SafeBlockEntityRenderer<CastingSpoutBlockEntity> {

View File

@@ -13,28 +13,19 @@ import com.simibubi.create.foundation.item.ItemHelper;
import com.simibubi.create.foundation.item.SmartInventory;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import io.github.fabricators_of_create.porting_lib.transfer.item.RecipeWrapper;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.RegistryAccess;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import net.minecraftforge.items.wrapper.RecipeWrapper;
import javax.annotation.Nonnull;
import java.util.List;
@@ -518,19 +509,6 @@ public class CokeOvenBlockEntity extends TFMGMachineBlockEntity implements IWren
super.invalidate();
itemCapability.invalidate();
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) {
if(controller!=null)
refreshCapability();
if (cap == ForgeCapabilities.ITEM_HANDLER)
return itemCapability.cast();
if (cap == ForgeCapabilities.FLUID_HANDLER)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {

View File

@@ -1,45 +1,40 @@
package com.drmangotea.createindustry.blocks.machines.oil_processing.distillation.controller;
import com.drmangotea.createindustry.blocks.machines.oil_processing.distillation.output.DistillationOutputBlockEntity;
import com.drmangotea.createindustry.blocks.tanks.SteelTankBlock;
import com.drmangotea.createindustry.blocks.tanks.SteelTankBlockEntity;
import com.drmangotea.createindustry.recipes.distillation.DistillationRecipe;
import com.drmangotea.createindustry.registry.TFMGBlocks;
import com.simibubi.create.Create;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
import com.simibubi.create.content.fluids.pipes.FluidPipeBlock;
import com.simibubi.create.content.fluids.pump.PumpBlock;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.blockEntity.behaviour.fluid.SmartFluidTankBehaviour;
import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.item.SmartInventory;
import com.simibubi.create.foundation.recipe.RecipeFinder;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import io.github.fabricators_of_create.porting_lib.transfer.TransferUtil;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.network.chat.Component;
import net.minecraft.world.Container;
import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import org.checkerframework.checker.units.qual.C;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;
import static com.drmangotea.createindustry.base.util.TFMGUtils.fill;
public class DistillationControllerBlockEntity extends SmartBlockEntity implements IHaveGoggleInformation {
private static final Object DistillationRecipesKey = new Object();
@@ -47,7 +42,7 @@ public class DistillationControllerBlockEntity extends SmartBlockEntity implemen
public DistillationRecipe recipe;
protected LazyOptional<IFluidHandler> fluidCapability;
protected LazyOptional<FluidTank> fluidCapability;
public final FluidTank tank= new SmartFluidTank(8000,this::onFluidStackChanged);
@@ -110,7 +105,7 @@ public class DistillationControllerBlockEntity extends SmartBlockEntity implemen
for(DistillationOutputBlockEntity be1 : outputs){
if(be1.tank.getSpace()==0)
if(be1.tank.isEmpty())
return;
}
@@ -125,15 +120,17 @@ public class DistillationControllerBlockEntity extends SmartBlockEntity implemen
if(fluidStack.isEmpty())
break;
if(output.tank.fill(new FluidStack(fluidStack, (int) (fluidStack.getAmount()*speedModifier)), IFluidHandler.FluidAction.SIMULATE)>output.tank.getCapacity())
if(fill(output.tank, new FluidStack(fluidStack, (int) (fluidStack.getAmount()*speedModifier)))>output.tank.getCapacity())
break;
output.tank.fill(new FluidStack(fluidStack, (int) (fluidStack.getAmount()*speedModifier)), IFluidHandler.FluidAction.EXECUTE);
fill(output.tank, new FluidStack(fluidStack, (int) (fluidStack.getAmount()*speedModifier)));
int consumption = (recipe.getInputFluid().getRequiredAmount()/6);
tank.drain((int) (consumption*speedModifier), IFluidHandler.FluidAction.EXECUTE);
try (Transaction t = TransferUtil.getTransaction()) {
tank.extract(tank.variant, (long) (consumption*speedModifier), t);
t.commit();
}
numero++;
@@ -232,16 +229,6 @@ public class DistillationControllerBlockEntity extends SmartBlockEntity implemen
return DistillationRecipesKey;
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) {
if (cap == ForgeCapabilities.FLUID_HANDLER)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
public ArrayList<DistillationOutputBlockEntity> getOutputs(){
ArrayList<DistillationOutputBlockEntity> outputs = new ArrayList<>();

View File

@@ -1,27 +1,22 @@
package com.drmangotea.createindustry.blocks.machines.oil_processing.distillation.output;
import com.drmangotea.createindustry.blocks.machines.oil_processing.distillation.controller.DistillationControllerBlock;
import com.drmangotea.createindustry.blocks.tanks.SteelTankBlockEntity;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.ChatFormatting;
import io.github.fabricators_of_create.porting_lib.transfer.TransferUtil;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import javax.annotation.Nonnull;
import java.util.List;
@@ -29,12 +24,12 @@ import java.util.List;
public class DistillationOutputBlockEntity extends SmartBlockEntity implements IHaveGoggleInformation {
protected LazyOptional<IFluidHandler> fluidCapability;
protected Storage<FluidVariant> fluidCapability;
public final FluidTank tank = new SmartFluidTank(8000,this::onFluidStackChanged);
public DistillationOutputBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
fluidCapability = LazyOptional.of(()->tank);
fluidCapability = tank.getSlot(0);
}
@Override
@@ -54,13 +49,6 @@ public class DistillationOutputBlockEntity extends SmartBlockEntity implements I
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) {
if (cap == ForgeCapabilities.FLUID_HANDLER)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
protected void read(CompoundTag compound, boolean clientPacket) {
super.read(compound, clientPacket);
@@ -82,8 +70,6 @@ public class DistillationOutputBlockEntity extends SmartBlockEntity implements I
return containedFluidTooltip(tooltip, isPlayerSneaking,
getCapability(ForgeCapabilities.FLUID_HANDLER));
fluidCapability);
}
}

View File

@@ -10,6 +10,12 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import io.github.fabricators_of_create.porting_lib.transfer.TransferUtil;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@@ -17,12 +23,6 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import javax.annotation.Nonnull;
import java.util.List;
@@ -38,7 +38,7 @@ public class PumpjackBaseBlockEntity extends SmartBlockEntity implements IHaveGo
public int miningRate = 0;
protected LazyOptional<IFluidHandler> fluidCapability;
protected LazyOptional<FluidTank> fluidCapability;
public FluidTank tankInventory;
public BlockPos deposit;
@@ -139,7 +139,7 @@ public class PumpjackBaseBlockEntity extends SmartBlockEntity implements IHaveGo
return;
tankInventory.setFluid(new FluidStack(TFMGFluids.CRUDE_OIL.getSource(), tankInventory.getFluidAmount() + miningRate));
tankInventory.setFluid(new FluidStack(FluidVariant.of(TFMGFluids.CRUDE_OIL.getSource()), tankInventory.getFluidAmount() + miningRate));
}
@@ -185,52 +185,36 @@ public class PumpjackBaseBlockEntity extends SmartBlockEntity implements IHaveGo
}
//--Fluid Info--//
LazyOptional<IFluidHandler> handler = this.getCapability(ForgeCapabilities.FLUID_HANDLER);
Optional<IFluidHandler> resolve = handler.resolve();
LazyOptional<FluidTank> handler = fluidCapability;
Optional<FluidTank> resolve = handler.resolve();
if (!resolve.isPresent())
return false;
IFluidHandler tank = resolve.get();
if (tank.getTanks() == 0)
return false;
FluidTank tank = resolve.get();
FluidStack fluidStack = tank.getFluid();
Lang.fluidName(fluidStack)
.style(ChatFormatting.GRAY)
.forGoggles(tooltip, 1);
Lang.builder()
.add(Lang.number(fluidStack.getAmount())
.add(mb)
.style(ChatFormatting.DARK_GREEN))
.text(ChatFormatting.GRAY, " / ")
.add(Lang.number(tank.getCapacity())
.add(mb)
.style(ChatFormatting.DARK_GRAY))
.forGoggles(tooltip, 1);
boolean isEmpty = true;
for (int i = 0; i < tank.getTanks(); i++) {
FluidStack fluidStack = tank.getFluidInTank(i);
if (fluidStack.isEmpty())
continue;
Lang.fluidName(fluidStack)
.style(ChatFormatting.GRAY)
.forGoggles(tooltip, 1);
Lang.builder()
.add(Lang.number(fluidStack.getAmount())
.add(mb)
.style(ChatFormatting.DARK_GREEN))
.text(ChatFormatting.GRAY, " / ")
.add(Lang.number(tank.getTankCapacity(i))
.add(mb)
.style(ChatFormatting.DARK_GRAY))
.forGoggles(tooltip, 1);
isEmpty = false;
}
if (tank.getTanks() > 1) {
if (isEmpty)
tooltip.remove(tooltip.size() - 1);
return true;
}
boolean isEmpty = tank.isEmpty();
if (!isEmpty)
return true;
Lang.translate("gui.goggles.fluid_container.capacity")
.add(Lang.number(tank.getTankCapacity(0))
.add(Lang.number(tank.getCapacity())
.add(mb)
.style(ChatFormatting.DARK_GREEN))
.style(ChatFormatting.DARK_GRAY)
@@ -256,13 +240,5 @@ public class PumpjackBaseBlockEntity extends SmartBlockEntity implements IHaveGo
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) {
if (cap == ForgeCapabilities.FLUID_HANDLER)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
}

View File

@@ -7,13 +7,13 @@ import com.simibubi.create.content.contraptions.ContraptionType;
import com.simibubi.create.content.contraptions.bearing.AnchoredLighter;
import com.simibubi.create.content.contraptions.bearing.BearingContraption;
import com.simibubi.create.content.contraptions.render.ContraptionLighter;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.apache.commons.lang3.tuple.Pair;
public class PumpjackContraption extends BearingContraption {
@@ -84,7 +84,7 @@ public class PumpjackContraption extends BearingContraption {
return facing.getAxis() == this.facing.getAxis();
}
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
@Override
public ContraptionLighter<?> makeLighter() {
return new AnchoredLighter(this);

View File

@@ -88,7 +88,7 @@ public class WeldingBehaviour extends BeltProcessingBehaviour {
super.write(compound, clientPacket);
if (clientPacket) {
compound.put("ParticleItems", NBTHelper.writeCompoundList(particleItems, ItemStack::serializeNBT));
compound.put("ParticleItems", NBTHelper.writeCompoundList(particleItems, ItemStack::getTag));
particleItems.clear();
}
}

View File

@@ -10,6 +10,9 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour
import com.simibubi.create.foundation.recipe.RecipeApplier;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.infrastructure.config.AllConfigs;
import io.github.fabricators_of_create.porting_lib.transfer.item.ItemHandlerHelper;
import io.github.fabricators_of_create.porting_lib.transfer.item.ItemStackHandler;
import io.github.fabricators_of_create.porting_lib.transfer.item.RecipeWrapper;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.ItemStack;
@@ -17,9 +20,6 @@ import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.items.ItemStackHandler;
import net.minecraftforge.items.wrapper.RecipeWrapper;
import java.util.List;
import java.util.Optional;

View File

@@ -1,26 +1,22 @@
package com.drmangotea.createindustry.blocks.machines.simple.welding_machine;
import com.drmangotea.createindustry.registry.TFMGBlocks;
import com.drmangotea.createindustry.registry.TFMGRecipeTypes;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.compat.jei.category.sequencedAssembly.SequencedAssemblySubCategory;
import com.simibubi.create.compat.recipeViewerCommon.SequencedAssemblySubCategoryType;
import com.simibubi.create.content.processing.recipe.ProcessingRecipe;
import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder.ProcessingRecipeParams;
import com.simibubi.create.content.processing.sequenced.IAssemblyRecipe;
import com.simibubi.create.foundation.utility.Lang;
import io.github.fabricators_of_create.porting_lib.transfer.item.RecipeWrapper;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.Level;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.items.wrapper.RecipeWrapper;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.List;
import java.util.Set;
import java.util.function.Supplier;
@ParametersAreNonnullByDefault
public class WeldingRecipe extends ProcessingRecipe<RecipeWrapper> implements IAssemblyRecipe {
@@ -51,7 +47,7 @@ public class WeldingRecipe extends ProcessingRecipe<RecipeWrapper> implements IA
public void addAssemblyIngredients(List<Ingredient> list) {}
@Override
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
public Component getDescriptionForAssembly() {
return Lang.translateDirect("recipe.assembly.welding");
}
@@ -62,8 +58,8 @@ public class WeldingRecipe extends ProcessingRecipe<RecipeWrapper> implements IA
}
@Override
public Supplier<Supplier<SequencedAssemblySubCategory>> getJEISubCategory() {
return () -> SequencedAssemblySubCategory.AssemblyPressing::new;
public SequencedAssemblySubCategoryType getJEISubCategory() {
return SequencedAssemblySubCategoryType.PRESSING;
}
}

View File

@@ -0,0 +1,119 @@
package com.drmangotea.createindustry.blocks.pipes.normal;
import com.jozufozu.flywheel.core.PartialModel;
import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour;
import com.simibubi.create.content.fluids.FluidTransportBehaviour;
import com.simibubi.create.content.fluids.pipes.FluidPipeBlock;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.utility.Iterate;
import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.fabricmc.fabric.api.rendering.data.v1.RenderAttachedBlockView;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
import java.util.*;
import java.util.function.Supplier;
public class GeneralPipeAttachmentModel extends ForwardingBakedModel {
final Map<FluidTransportBehaviour.AttachmentTypes.ComponentPartials, Map<Direction, PartialModel>> attachments;
final PartialModel casing;
public GeneralPipeAttachmentModel(BakedModel wrapped, Map<FluidTransportBehaviour.AttachmentTypes.ComponentPartials, Map<Direction, PartialModel>> attachments, PartialModel casing) {
this.wrapped = wrapped;
this.attachments = attachments;
this.casing = casing;
}
@Override
public boolean isVanillaAdapter() {
return false;
}
@Override
public void emitBlockQuads(BlockAndTintGetter world, BlockState state, BlockPos pos, Supplier<RandomSource> randomSupplier, RenderContext context) {
PipeModelData data = new PipeModelData();
BracketedBlockEntityBehaviour bracket = BlockEntityBehaviour.get(world, pos, BracketedBlockEntityBehaviour.TYPE);
RenderAttachedBlockView attachmentView = (RenderAttachedBlockView) world;
Object attachment = attachmentView.getBlockEntityRenderAttachment(pos);
if (attachment instanceof FluidTransportBehaviour.AttachmentTypes[] attachments) {
for (int i = 0; i < attachments.length; i++) {
data.putAttachment(Iterate.directions[i], attachments[i]);
}
}
if (bracket != null)
data.putBracket(bracket.getBracket());
data.setEncased(FluidPipeBlock.shouldDrawCasing(world, pos, state));
super.emitBlockQuads(world, state, pos, randomSupplier, context);
addQuads(world, state, pos, randomSupplier, context, data);
}
private void addQuads(BlockAndTintGetter world, BlockState state, BlockPos pos, Supplier<RandomSource> randomSupplier, RenderContext context,
PipeModelData pipeData) {
BakedModel bracket = pipeData.getBracket();
if (bracket != null)
bracket.emitBlockQuads(world, state, pos, randomSupplier, context);
for (Direction d : Iterate.directions) {
FluidTransportBehaviour.AttachmentTypes type = pipeData.getAttachment(d);
for (FluidTransportBehaviour.AttachmentTypes.ComponentPartials partial : type.partials) {
attachments.get(partial)
.get(d)
.get()
.emitBlockQuads(world, state, pos, randomSupplier, context);
}
}
if (pipeData.isEncased())
(casing.get())
.emitBlockQuads(world, state, pos, randomSupplier, context);
}
private static class PipeModelData {
private final FluidTransportBehaviour.AttachmentTypes[] attachments;
private boolean encased;
private BakedModel bracket;
public PipeModelData() {
attachments = new FluidTransportBehaviour.AttachmentTypes[6];
Arrays.fill(attachments, FluidTransportBehaviour.AttachmentTypes.NONE);
}
public void putBracket(BlockState state) {
if (state != null) {
this.bracket = Minecraft.getInstance()
.getBlockRenderer()
.getBlockModel(state);
}
}
public BakedModel getBracket() {
return bracket;
}
public void putAttachment(Direction face, FluidTransportBehaviour.AttachmentTypes rim) {
attachments[face.get3DDataValue()] = rim;
}
public FluidTransportBehaviour.AttachmentTypes getAttachment(Direction face) {
return attachments[face.get3DDataValue()];
}
public void setEncased(boolean encased) {
this.encased = encased;
}
public boolean isEncased() {
return encased;
}
}
}

View File

@@ -1,153 +0,0 @@
package com.drmangotea.createindustry.blocks.pipes.normal.aluminum;
import com.drmangotea.createindustry.registry.TFMGPartialModels;
import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour;
import com.simibubi.create.content.fluids.FluidTransportBehaviour;
import com.simibubi.create.content.fluids.pipes.FluidPipeBlock;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.model.BakedModelWrapperWithData;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.client.ChunkRenderTypeSet;
import net.minecraftforge.client.model.data.ModelData;
import net.minecraftforge.client.model.data.ModelProperty;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static net.minecraft.world.level.block.PipeBlock.PROPERTY_BY_DIRECTION;
public class AluminumPipeAttachmentModel extends BakedModelWrapperWithData {
private static final ModelProperty<PipeModelData> PIPE_PROPERTY = new ModelProperty<>();
public AluminumPipeAttachmentModel(BakedModel template) {
super(template);
}
@Override
protected ModelData.Builder gatherModelData(ModelData.Builder builder, BlockAndTintGetter world, BlockPos pos, BlockState state,
ModelData blockEntityData) {
PipeModelData data = new PipeModelData();
FluidTransportBehaviour transport = BlockEntityBehaviour.get(world, pos, FluidTransportBehaviour.TYPE);
BracketedBlockEntityBehaviour bracket = BlockEntityBehaviour.get(world, pos, BracketedBlockEntityBehaviour.TYPE);
if (transport != null)
for (Direction d : Iterate.directions) {
boolean shouldConnect = true;
if(world.getBlockState(pos.relative(d)).getBlock() instanceof FluidPipeBlock) {
if(d.getAxis().isHorizontal())
shouldConnect = world.getBlockState(pos.relative(d)).getValue(PROPERTY_BY_DIRECTION.get(d.getOpposite()));
}
data.putAttachment(d, transport.getRenderedRimAttachment(world, pos, state, d));
if(!shouldConnect)
if(state.getBlock() instanceof FluidPipeBlock)
if(state.getValue(PROPERTY_BY_DIRECTION.get(d)))
data.putAttachment(d, FluidTransportBehaviour.AttachmentTypes.RIM);
}
if (bracket != null)
data.putBracket(bracket.getBracket());
data.setEncased(FluidPipeBlock.shouldDrawCasing(world, pos, state));
return builder.with(PIPE_PROPERTY, data);
}
@SuppressWarnings("removal")
@Override
public ChunkRenderTypeSet getRenderTypes(@NotNull BlockState state, @NotNull RandomSource rand, @NotNull ModelData data) {
ChunkRenderTypeSet set = super.getRenderTypes(state, rand, data);
if (set.isEmpty()) {
return ItemBlockRenderTypes.getRenderLayers(state);
}
return set;
}
@Override
public List<BakedQuad> getQuads(BlockState state, Direction side, RandomSource rand, ModelData data, RenderType renderType) {
List<BakedQuad> quads = super.getQuads(state, side, rand, data, renderType);
if (data.has(PIPE_PROPERTY)) {
PipeModelData pipeData = data.get(PIPE_PROPERTY);
quads = new ArrayList<>(quads);
addQuads(quads, state, side, rand, data, pipeData, renderType);
}
return quads;
}
private void addQuads(List<BakedQuad> quads, BlockState state, Direction side, RandomSource rand, ModelData data,
PipeModelData pipeData, RenderType renderType) {
BakedModel bracket = pipeData.getBracket();
if (bracket != null)
quads.addAll(bracket.getQuads(state, side, rand, data, renderType));
for (Direction d : Iterate.directions) {
FluidTransportBehaviour.AttachmentTypes type = pipeData.getAttachment(d);
for (FluidTransportBehaviour.AttachmentTypes.ComponentPartials partial : type.partials) {
quads.addAll(TFMGPartialModels.ALUMINUM_PIPE_ATTACHMENTS.get(partial)
.get(d)
.get()
.getQuads(state, side, rand, data, renderType));
}
}
if (pipeData.isEncased())
quads.addAll(TFMGPartialModels.ALUMINUM_FLUID_PIPE_CASING.get()
.getQuads(state, side, rand, data, renderType));
}
private static class PipeModelData {
private FluidTransportBehaviour.AttachmentTypes[] attachments;
private boolean encased;
private BakedModel bracket;
public PipeModelData() {
attachments = new FluidTransportBehaviour.AttachmentTypes[6];
Arrays.fill(attachments, FluidTransportBehaviour.AttachmentTypes.NONE);
}
public void putBracket(BlockState state) {
if (state != null) {
this.bracket = Minecraft.getInstance()
.getBlockRenderer()
.getBlockModel(state);
}
}
public BakedModel getBracket() {
return bracket;
}
public void putAttachment(Direction face, FluidTransportBehaviour.AttachmentTypes rim) {
attachments[face.get3DDataValue()] = rim;
}
public FluidTransportBehaviour.AttachmentTypes getAttachment(Direction face) {
return attachments[face.get3DDataValue()];
}
public void setEncased(boolean encased) {
this.encased = encased;
}
public boolean isEncased() {
return encased;
}
}
}

View File

@@ -1,153 +0,0 @@
package com.drmangotea.createindustry.blocks.pipes.normal.brass;
import com.drmangotea.createindustry.registry.TFMGPartialModels;
import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour;
import com.simibubi.create.content.fluids.FluidTransportBehaviour;
import com.simibubi.create.content.fluids.pipes.FluidPipeBlock;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.model.BakedModelWrapperWithData;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.client.ChunkRenderTypeSet;
import net.minecraftforge.client.model.data.ModelData;
import net.minecraftforge.client.model.data.ModelProperty;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static net.minecraft.world.level.block.PipeBlock.PROPERTY_BY_DIRECTION;
public class BrassPipeAttachmentModel extends BakedModelWrapperWithData {
private static final ModelProperty<PipeModelData> PIPE_PROPERTY = new ModelProperty<>();
public BrassPipeAttachmentModel(BakedModel template) {
super(template);
}
@Override
protected ModelData.Builder gatherModelData(ModelData.Builder builder, BlockAndTintGetter world, BlockPos pos, BlockState state,
ModelData blockEntityData) {
PipeModelData data = new PipeModelData();
FluidTransportBehaviour transport = BlockEntityBehaviour.get(world, pos, FluidTransportBehaviour.TYPE);
BracketedBlockEntityBehaviour bracket = BlockEntityBehaviour.get(world, pos, BracketedBlockEntityBehaviour.TYPE);
if (transport != null)
for (Direction d : Iterate.directions) {
boolean shouldConnect = true;
if(world.getBlockState(pos.relative(d)).getBlock() instanceof FluidPipeBlock) {
if(d.getAxis().isHorizontal())
shouldConnect = world.getBlockState(pos.relative(d)).getValue(PROPERTY_BY_DIRECTION.get(d.getOpposite()));
}
data.putAttachment(d, transport.getRenderedRimAttachment(world, pos, state, d));
if(!shouldConnect)
if(state.getBlock() instanceof FluidPipeBlock)
if(state.getValue(PROPERTY_BY_DIRECTION.get(d)))
data.putAttachment(d, FluidTransportBehaviour.AttachmentTypes.RIM);
}
if (bracket != null)
data.putBracket(bracket.getBracket());
data.setEncased(FluidPipeBlock.shouldDrawCasing(world, pos, state));
return builder.with(PIPE_PROPERTY, data);
}
@SuppressWarnings("removal")
@Override
public ChunkRenderTypeSet getRenderTypes(@NotNull BlockState state, @NotNull RandomSource rand, @NotNull ModelData data) {
ChunkRenderTypeSet set = super.getRenderTypes(state, rand, data);
if (set.isEmpty()) {
return ItemBlockRenderTypes.getRenderLayers(state);
}
return set;
}
@Override
public List<BakedQuad> getQuads(BlockState state, Direction side, RandomSource rand, ModelData data, RenderType renderType) {
List<BakedQuad> quads = super.getQuads(state, side, rand, data, renderType);
if (data.has(PIPE_PROPERTY)) {
PipeModelData pipeData = data.get(PIPE_PROPERTY);
quads = new ArrayList<>(quads);
addQuads(quads, state, side, rand, data, pipeData, renderType);
}
return quads;
}
private void addQuads(List<BakedQuad> quads, BlockState state, Direction side, RandomSource rand, ModelData data,
PipeModelData pipeData, RenderType renderType) {
BakedModel bracket = pipeData.getBracket();
if (bracket != null)
quads.addAll(bracket.getQuads(state, side, rand, data, renderType));
for (Direction d : Iterate.directions) {
FluidTransportBehaviour.AttachmentTypes type = pipeData.getAttachment(d);
for (FluidTransportBehaviour.AttachmentTypes.ComponentPartials partial : type.partials) {
quads.addAll(TFMGPartialModels.BRASS_PIPE_ATTACHMENTS.get(partial)
.get(d)
.get()
.getQuads(state, side, rand, data, renderType));
}
}
if (pipeData.isEncased())
quads.addAll(TFMGPartialModels.BRASS_FLUID_PIPE_CASING.get()
.getQuads(state, side, rand, data, renderType));
}
private static class PipeModelData {
private FluidTransportBehaviour.AttachmentTypes[] attachments;
private boolean encased;
private BakedModel bracket;
public PipeModelData() {
attachments = new FluidTransportBehaviour.AttachmentTypes[6];
Arrays.fill(attachments, FluidTransportBehaviour.AttachmentTypes.NONE);
}
public void putBracket(BlockState state) {
if (state != null) {
this.bracket = Minecraft.getInstance()
.getBlockRenderer()
.getBlockModel(state);
}
}
public BakedModel getBracket() {
return bracket;
}
public void putAttachment(Direction face, FluidTransportBehaviour.AttachmentTypes rim) {
attachments[face.get3DDataValue()] = rim;
}
public FluidTransportBehaviour.AttachmentTypes getAttachment(Direction face) {
return attachments[face.get3DDataValue()];
}
public void setEncased(boolean encased) {
this.encased = encased;
}
public boolean isEncased() {
return encased;
}
}
}

View File

@@ -1,153 +0,0 @@
package com.drmangotea.createindustry.blocks.pipes.normal.cast_iron;
import com.drmangotea.createindustry.registry.TFMGPartialModels;
import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour;
import com.simibubi.create.content.fluids.FluidTransportBehaviour;
import com.simibubi.create.content.fluids.pipes.FluidPipeBlock;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.model.BakedModelWrapperWithData;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.client.ChunkRenderTypeSet;
import net.minecraftforge.client.model.data.ModelData;
import net.minecraftforge.client.model.data.ModelProperty;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static net.minecraft.world.level.block.PipeBlock.PROPERTY_BY_DIRECTION;
public class CastIronPipeAttachmentModel extends BakedModelWrapperWithData {
private static final ModelProperty<PipeModelData> PIPE_PROPERTY = new ModelProperty<>();
public CastIronPipeAttachmentModel(BakedModel template) {
super(template);
}
@Override
protected ModelData.Builder gatherModelData(ModelData.Builder builder, BlockAndTintGetter world, BlockPos pos, BlockState state,
ModelData blockEntityData) {
PipeModelData data = new PipeModelData();
FluidTransportBehaviour transport = BlockEntityBehaviour.get(world, pos, FluidTransportBehaviour.TYPE);
BracketedBlockEntityBehaviour bracket = BlockEntityBehaviour.get(world, pos, BracketedBlockEntityBehaviour.TYPE);
if (transport != null)
for (Direction d : Iterate.directions) {
boolean shouldConnect = true;
if(world.getBlockState(pos.relative(d)).getBlock() instanceof FluidPipeBlock) {
if(d.getAxis().isHorizontal())
shouldConnect = world.getBlockState(pos.relative(d)).getValue(PROPERTY_BY_DIRECTION.get(d.getOpposite()));
}
data.putAttachment(d, transport.getRenderedRimAttachment(world, pos, state, d));
if(!shouldConnect)
if(state.getBlock() instanceof FluidPipeBlock)
if(state.getValue(PROPERTY_BY_DIRECTION.get(d)))
data.putAttachment(d, FluidTransportBehaviour.AttachmentTypes.RIM);
}
if (bracket != null)
data.putBracket(bracket.getBracket());
data.setEncased(FluidPipeBlock.shouldDrawCasing(world, pos, state));
return builder.with(PIPE_PROPERTY, data);
}
@SuppressWarnings("removal")
@Override
public ChunkRenderTypeSet getRenderTypes(@NotNull BlockState state, @NotNull RandomSource rand, @NotNull ModelData data) {
ChunkRenderTypeSet set = super.getRenderTypes(state, rand, data);
if (set.isEmpty()) {
return ItemBlockRenderTypes.getRenderLayers(state);
}
return set;
}
@Override
public List<BakedQuad> getQuads(BlockState state, Direction side, RandomSource rand, ModelData data, RenderType renderType) {
List<BakedQuad> quads = super.getQuads(state, side, rand, data, renderType);
if (data.has(PIPE_PROPERTY)) {
PipeModelData pipeData = data.get(PIPE_PROPERTY);
quads = new ArrayList<>(quads);
addQuads(quads, state, side, rand, data, pipeData, renderType);
}
return quads;
}
private void addQuads(List<BakedQuad> quads, BlockState state, Direction side, RandomSource rand, ModelData data,
PipeModelData pipeData, RenderType renderType) {
BakedModel bracket = pipeData.getBracket();
if (bracket != null)
quads.addAll(bracket.getQuads(state, side, rand, data, renderType));
for (Direction d : Iterate.directions) {
FluidTransportBehaviour.AttachmentTypes type = pipeData.getAttachment(d);
for (FluidTransportBehaviour.AttachmentTypes.ComponentPartials partial : type.partials) {
quads.addAll(TFMGPartialModels.CAST_IRON_PIPE_ATTACHMENTS.get(partial)
.get(d)
.get()
.getQuads(state, side, rand, data, renderType));
}
}
if (pipeData.isEncased())
quads.addAll(TFMGPartialModels.CAST_IRON_FLUID_PIPE_CASING.get()
.getQuads(state, side, rand, data, renderType));
}
private static class PipeModelData {
private FluidTransportBehaviour.AttachmentTypes[] attachments;
private boolean encased;
private BakedModel bracket;
public PipeModelData() {
attachments = new FluidTransportBehaviour.AttachmentTypes[6];
Arrays.fill(attachments, FluidTransportBehaviour.AttachmentTypes.NONE);
}
public void putBracket(BlockState state) {
if (state != null) {
this.bracket = Minecraft.getInstance()
.getBlockRenderer()
.getBlockModel(state);
}
}
public BakedModel getBracket() {
return bracket;
}
public void putAttachment(Direction face, FluidTransportBehaviour.AttachmentTypes rim) {
attachments[face.get3DDataValue()] = rim;
}
public FluidTransportBehaviour.AttachmentTypes getAttachment(Direction face) {
return attachments[face.get3DDataValue()];
}
public void setEncased(boolean encased) {
this.encased = encased;
}
public boolean isEncased() {
return encased;
}
}
}

View File

@@ -1,153 +0,0 @@
package com.drmangotea.createindustry.blocks.pipes.normal.plastic;
import com.drmangotea.createindustry.registry.TFMGPartialModels;
import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour;
import com.simibubi.create.content.fluids.FluidTransportBehaviour;
import com.simibubi.create.content.fluids.pipes.FluidPipeBlock;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.model.BakedModelWrapperWithData;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.client.ChunkRenderTypeSet;
import net.minecraftforge.client.model.data.ModelData;
import net.minecraftforge.client.model.data.ModelProperty;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static net.minecraft.world.level.block.PipeBlock.PROPERTY_BY_DIRECTION;
public class PlasticPipeAttachmentModel extends BakedModelWrapperWithData {
private static final ModelProperty<PipeModelData> PIPE_PROPERTY = new ModelProperty<>();
public PlasticPipeAttachmentModel(BakedModel template) {
super(template);
}
@Override
protected ModelData.Builder gatherModelData(ModelData.Builder builder, BlockAndTintGetter world, BlockPos pos, BlockState state,
ModelData blockEntityData) {
PipeModelData data = new PipeModelData();
FluidTransportBehaviour transport = BlockEntityBehaviour.get(world, pos, FluidTransportBehaviour.TYPE);
BracketedBlockEntityBehaviour bracket = BlockEntityBehaviour.get(world, pos, BracketedBlockEntityBehaviour.TYPE);
if (transport != null)
for (Direction d : Iterate.directions) {
boolean shouldConnect = true;
if(world.getBlockState(pos.relative(d)).getBlock() instanceof FluidPipeBlock) {
if(d.getAxis().isHorizontal())
shouldConnect = world.getBlockState(pos.relative(d)).getValue(PROPERTY_BY_DIRECTION.get(d.getOpposite()));
}
data.putAttachment(d, transport.getRenderedRimAttachment(world, pos, state, d));
if(!shouldConnect)
if(state.getBlock() instanceof FluidPipeBlock)
if(state.getValue(PROPERTY_BY_DIRECTION.get(d)))
data.putAttachment(d, FluidTransportBehaviour.AttachmentTypes.RIM);
}
if (bracket != null)
data.putBracket(bracket.getBracket());
data.setEncased(FluidPipeBlock.shouldDrawCasing(world, pos, state));
return builder.with(PIPE_PROPERTY, data);
}
@SuppressWarnings("removal")
@Override
public ChunkRenderTypeSet getRenderTypes(@NotNull BlockState state, @NotNull RandomSource rand, @NotNull ModelData data) {
ChunkRenderTypeSet set = super.getRenderTypes(state, rand, data);
if (set.isEmpty()) {
return ItemBlockRenderTypes.getRenderLayers(state);
}
return set;
}
@Override
public List<BakedQuad> getQuads(BlockState state, Direction side, RandomSource rand, ModelData data, RenderType renderType) {
List<BakedQuad> quads = super.getQuads(state, side, rand, data, renderType);
if (data.has(PIPE_PROPERTY)) {
PipeModelData pipeData = data.get(PIPE_PROPERTY);
quads = new ArrayList<>(quads);
addQuads(quads, state, side, rand, data, pipeData, renderType);
}
return quads;
}
private void addQuads(List<BakedQuad> quads, BlockState state, Direction side, RandomSource rand, ModelData data,
PipeModelData pipeData, RenderType renderType) {
BakedModel bracket = pipeData.getBracket();
if (bracket != null)
quads.addAll(bracket.getQuads(state, side, rand, data, renderType));
for (Direction d : Iterate.directions) {
FluidTransportBehaviour.AttachmentTypes type = pipeData.getAttachment(d);
for (FluidTransportBehaviour.AttachmentTypes.ComponentPartials partial : type.partials) {
quads.addAll(TFMGPartialModels.PLASTIC_PIPE_ATTACHMENTS.get(partial)
.get(d)
.get()
.getQuads(state, side, rand, data, renderType));
}
}
if (pipeData.isEncased())
quads.addAll(TFMGPartialModels.PLASTIC_FLUID_PIPE_CASING.get()
.getQuads(state, side, rand, data, renderType));
}
private static class PipeModelData {
private FluidTransportBehaviour.AttachmentTypes[] attachments;
private boolean encased;
private BakedModel bracket;
public PipeModelData() {
attachments = new FluidTransportBehaviour.AttachmentTypes[6];
Arrays.fill(attachments, FluidTransportBehaviour.AttachmentTypes.NONE);
}
public void putBracket(BlockState state) {
if (state != null) {
this.bracket = Minecraft.getInstance()
.getBlockRenderer()
.getBlockModel(state);
}
}
public BakedModel getBracket() {
return bracket;
}
public void putAttachment(Direction face, FluidTransportBehaviour.AttachmentTypes rim) {
attachments[face.get3DDataValue()] = rim;
}
public FluidTransportBehaviour.AttachmentTypes getAttachment(Direction face) {
return attachments[face.get3DDataValue()];
}
public void setEncased(boolean encased) {
this.encased = encased;
}
public boolean isEncased() {
return encased;
}
}
}

View File

@@ -1,155 +0,0 @@
package com.drmangotea.createindustry.blocks.pipes.normal.steel;
import com.drmangotea.createindustry.blocks.pipes.normal.LockablePipeBlockEntity;
import com.drmangotea.createindustry.registry.TFMGPartialModels;
import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour;
import com.simibubi.create.content.fluids.FluidTransportBehaviour;
import com.simibubi.create.content.fluids.pipes.FluidPipeBlock;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.model.BakedModelWrapperWithData;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.client.ChunkRenderTypeSet;
import net.minecraftforge.client.model.data.ModelData;
import net.minecraftforge.client.model.data.ModelProperty;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.locks.Lock;
import static net.minecraft.world.level.block.PipeBlock.PROPERTY_BY_DIRECTION;
public class SteelPipeAttachmentModel extends BakedModelWrapperWithData {
private static final ModelProperty<PipeModelData> PIPE_PROPERTY = new ModelProperty<>();
public SteelPipeAttachmentModel(BakedModel template) {
super(template);
}
@Override
protected ModelData.Builder gatherModelData(ModelData.Builder builder, BlockAndTintGetter world, BlockPos pos, BlockState state,
ModelData blockEntityData) {
PipeModelData data = new PipeModelData();
FluidTransportBehaviour transport = BlockEntityBehaviour.get(world, pos, FluidTransportBehaviour.TYPE);
BracketedBlockEntityBehaviour bracket = BlockEntityBehaviour.get(world, pos, BracketedBlockEntityBehaviour.TYPE);
if (transport != null)
for (Direction d : Iterate.directions) {
boolean shouldConnect = true;
if(world.getBlockState(pos.relative(d)).getBlock() instanceof FluidPipeBlock) {
if(d.getAxis().isHorizontal())
shouldConnect = world.getBlockState(pos.relative(d)).getValue(PROPERTY_BY_DIRECTION.get(d.getOpposite()));
}
data.putAttachment(d, transport.getRenderedRimAttachment(world, pos, state, d));
if(!shouldConnect)
if(state.getBlock() instanceof FluidPipeBlock)
if(state.getValue(PROPERTY_BY_DIRECTION.get(d)))
data.putAttachment(d, FluidTransportBehaviour.AttachmentTypes.RIM);
}
if (bracket != null)
data.putBracket(bracket.getBracket());
data.setEncased(FluidPipeBlock.shouldDrawCasing(world, pos, state));
return builder.with(PIPE_PROPERTY, data);
}
@SuppressWarnings("removal")
@Override
public ChunkRenderTypeSet getRenderTypes(@NotNull BlockState state, @NotNull RandomSource rand, @NotNull ModelData data) {
ChunkRenderTypeSet set = super.getRenderTypes(state, rand, data);
if (set.isEmpty()) {
return ItemBlockRenderTypes.getRenderLayers(state);
}
return set;
}
@Override
public List<BakedQuad> getQuads(BlockState state, Direction side, RandomSource rand, ModelData data, RenderType renderType) {
List<BakedQuad> quads = super.getQuads(state, side, rand, data, renderType);
if (data.has(PIPE_PROPERTY)) {
PipeModelData pipeData = data.get(PIPE_PROPERTY);
quads = new ArrayList<>(quads);
addQuads(quads, state, side, rand, data, pipeData, renderType);
}
return quads;
}
private void addQuads(List<BakedQuad> quads, BlockState state, Direction side, RandomSource rand, ModelData data,
PipeModelData pipeData, RenderType renderType) {
BakedModel bracket = pipeData.getBracket();
if (bracket != null)
quads.addAll(bracket.getQuads(state, side, rand, data, renderType));
for (Direction d : Iterate.directions) {
FluidTransportBehaviour.AttachmentTypes type = pipeData.getAttachment(d);
for (FluidTransportBehaviour.AttachmentTypes.ComponentPartials partial : type.partials) {
quads.addAll(TFMGPartialModels.STEEL_PIPE_ATTACHMENTS.get(partial)
.get(d)
.get()
.getQuads(state, side, rand, data, renderType));
}
}
if (pipeData.isEncased())
quads.addAll(TFMGPartialModels.STEEL_FLUID_PIPE_CASING.get()
.getQuads(state, side, rand, data, renderType));
}
public class PipeModelData {
private FluidTransportBehaviour.AttachmentTypes[] attachments;
private boolean encased;
private BakedModel bracket;
public PipeModelData() {
attachments = new FluidTransportBehaviour.AttachmentTypes[6];
Arrays.fill(attachments, FluidTransportBehaviour.AttachmentTypes.NONE);
}
public void putBracket(BlockState state) {
if (state != null) {
this.bracket = Minecraft.getInstance()
.getBlockRenderer()
.getBlockModel(state);
}
}
public BakedModel getBracket() {
return bracket;
}
public void putAttachment(Direction face, FluidTransportBehaviour.AttachmentTypes rim) {
attachments[face.get3DDataValue()] = rim;
}
public FluidTransportBehaviour.AttachmentTypes getAttachment(Direction face) {
return attachments[face.get3DDataValue()];
}
public void setEncased(boolean encased) {
this.encased = encased;
}
public boolean isEncased() {
return encased;
}
}
}

View File

@@ -2,68 +2,55 @@ package com.drmangotea.createindustry.blocks.tanks;
import com.drmangotea.createindustry.base.TFMGSpriteShifts;
import com.simibubi.create.AllSpriteShifts;
import com.simibubi.create.api.connectivity.ConnectivityHandler;
import com.simibubi.create.content.fluids.tank.FluidTankCTBehaviour;
import com.simibubi.create.content.fluids.tank.FluidTankModel;
import com.simibubi.create.foundation.block.connected.CTModel;
import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.client.model.data.ModelData;
import net.minecraftforge.client.model.data.ModelProperty;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Supplier;
public class SteelFluidTankModel extends CTModel {
protected static final ModelProperty<CullData> CULL_PROPERTY = new ModelProperty<>();
public static SteelFluidTankModel standard(BakedModel originalModel) {
return new SteelFluidTankModel(originalModel, TFMGSpriteShifts.STEEL_FLUID_TANK, TFMGSpriteShifts.STEEL_FLUID_TANK_TOP,
TFMGSpriteShifts.STEEL_FLUID_TANK_INNER);
}
private SteelFluidTankModel(BakedModel originalModel, CTSpriteShiftEntry side, CTSpriteShiftEntry top,
CTSpriteShiftEntry inner) {
super(originalModel, new FluidTankCTBehaviour(side, top, inner));
}
@Override
protected ModelData.Builder gatherModelData(ModelData.Builder builder, BlockAndTintGetter world, BlockPos pos, BlockState state,
ModelData blockEntityData) {
super.gatherModelData(builder, world, pos, state, blockEntityData);
CullData cullData = new CullData();
public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier<RandomSource> randomSupplier, RenderContext context) {
SteelFluidTankModel.CullData cullData = new SteelFluidTankModel.CullData();
for (Direction d : Iterate.horizontalDirections)
cullData.setCulled(d, ConnectivityHandler.isConnected(world, pos, pos.relative(d)));
return builder.with(CULL_PROPERTY, cullData);
cullData.setCulled(d, ConnectivityHandler.isConnected(blockView, pos, pos.relative(d)));
context.pushTransform(quad -> {
Direction cullFace = quad.cullFace();
if (cullFace != null && cullData.isCulled(cullFace)) {
return false;
}
quad.cullFace(null);
return true;
});
super.emitBlockQuads(blockView, state, pos, randomSupplier, context);
context.popTransform();
}
@Override
public List<BakedQuad> getQuads(BlockState state, Direction side, RandomSource rand, ModelData extraData, RenderType renderType) {
if (side != null)
return Collections.emptyList();
List<BakedQuad> quads = new ArrayList<>();
for (Direction d : Iterate.directions) {
if (extraData.has(CULL_PROPERTY) && extraData.get(CULL_PROPERTY)
.isCulled(d))
continue;
quads.addAll(super.getQuads(state, d, rand, extraData, renderType));
}
quads.addAll(super.getQuads(state, null, rand, extraData, renderType));
return quads;
}
private class CullData {
private static class CullData {
boolean[] culledFaces;
public CullData() {
@@ -87,3 +74,4 @@ public class SteelFluidTankModel extends CTModel {
}
}

View File

@@ -6,61 +6,62 @@ import com.jozufozu.flywheel.util.transform.TransformStack;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.content.fluids.tank.FluidTankBlockEntity;
import com.simibubi.create.content.fluids.tank.FluidTankRenderer;
import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer;
import com.simibubi.create.foundation.fluid.FluidRenderer;
import com.simibubi.create.foundation.render.CachedBufferer;
import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariantAttributes;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.core.Direction;
import net.minecraft.util.Mth;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.templates.FluidTank;
public class SteelFluidTankRenderer extends SafeBlockEntityRenderer<SteelTankBlockEntity> {
public SteelFluidTankRenderer(BlockEntityRendererProvider.Context context) {}
@Override
protected void renderSafe(SteelTankBlockEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
protected void renderSafe(SteelTankBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) {
if (!te.isController())
if (!be.isController())
return;
if (!te.window) {
if (te.isDistillationTower)
renderAsDistillationTower(te, partialTicks, ms, buffer, light, overlay);
if (!be.window) {
if (be.isDistillationTower)
renderAsDistillationTower(be, partialTicks, ms, buffer, light, overlay);
return;
}
LerpedFloat fluidLevel = te.getFluidLevel();
LerpedFloat fluidLevel = be.getFluidLevel();
if (fluidLevel == null)
return;
float capHeight = 1 / 4f;
float tankHullWidth = 1 / 16f + 1 / 128f;
float minPuddleHeight = 1 / 16f;
float totalHeight = te.height - 2 * capHeight - minPuddleHeight;
float totalHeight = be.height - 2 * capHeight - minPuddleHeight;
float level = fluidLevel.getValue(partialTicks);
if (level < 1 / (512f * totalHeight))
return;
float clampedLevel = Mth.clamp(level * totalHeight, 0, totalHeight);
FluidTank tank = te.tankInventory;
FluidTank tank = be.tankInventory;
FluidStack fluidStack = tank.getFluid();
if (fluidStack.isEmpty())
return;
boolean top = fluidStack.getFluid()
.getFluidType()
.isLighterThanAir();
boolean top = FluidVariantAttributes.isLighterThanAir(fluidStack.getType());
float xMin = tankHullWidth;
float xMax = xMin + te.width - 2 * tankHullWidth;
float xMax = xMin + be.width - 2 * tankHullWidth;
float yMin = totalHeight + capHeight + minPuddleHeight - clampedLevel;
float yMax = yMin + clampedLevel;
@@ -70,7 +71,7 @@ public class SteelFluidTankRenderer extends SafeBlockEntityRenderer<SteelTankBlo
}
float zMin = tankHullWidth;
float zMax = zMin + te.width - 2 * tankHullWidth;
float zMax = zMin + be.width - 2 * tankHullWidth;
ms.pushPose();
ms.translate(0, clampedLevel - totalHeight, 0);
@@ -78,13 +79,13 @@ public class SteelFluidTankRenderer extends SafeBlockEntityRenderer<SteelTankBlo
ms.popPose();
}
protected void renderAsDistillationTower(SteelTankBlockEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) {
BlockState blockState = te.getBlockState();
protected void renderAsDistillationTower(SteelTankBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) {
BlockState blockState = be.getBlockState();
VertexConsumer vb = buffer.getBuffer(RenderType.solid());
ms.pushPose();
TransformStack msr = TransformStack.cast(ms);
msr.translate(te.width / 2f, 0.5, te.width / 2f);
msr.translate(be.width / 2f, 0.5, be.width / 2f);
float dialPivot = 5.75f / 16;
@@ -94,15 +95,15 @@ public class SteelFluidTankRenderer extends SafeBlockEntityRenderer<SteelTankBlo
CachedBufferer.partial(TFMGPartialModels.TOWER_GAUGE, blockState)
.rotateY(d.toYRot())
.unCentre()
.translate(te.width / 2f - 6 / 16f, 0, 0)
.translate(be.width / 2f - 6 / 16f, 0, 0)
.light(light)
.renderInto(ms, vb);
CachedBufferer.partial(AllPartialModels.BOILER_GAUGE_DIAL, blockState)
.rotateY(d.toYRot())
.unCentre()
.translate(te.width / 2f - 6 / 16f, 0, 0)
.translate(be.width / 2f - 6 / 16f, 0, 0)
.translate(0, dialPivot, dialPivot)
.rotateX(-te.visualGaugeRotation.getValue(partialTicks))
.rotateX(-be.visualGaugeRotation.getValue(partialTicks))
.translate(0, -dialPivot, -dialPivot)
.light(light)
.renderInto(ms, vb);
@@ -113,8 +114,7 @@ public class SteelFluidTankRenderer extends SafeBlockEntityRenderer<SteelTankBlo
}
@Override
public boolean shouldRenderOffScreen(SteelTankBlockEntity te) {
return te.isController();
public boolean shouldRenderOffScreen(SteelTankBlockEntity be) {
return be.isController();
}
}

View File

@@ -1,29 +1,37 @@
package com.drmangotea.createindustry.blocks.tanks;
import com.drmangotea.createindustry.CreateTFMG;
import com.drmangotea.createindustry.registry.TFMGBlockEntities;
import com.simibubi.create.api.connectivity.ConnectivityHandler;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.content.fluids.tank.FluidTankBlockEntity;
import com.simibubi.create.content.fluids.tank.FluidTankItem;
import com.simibubi.create.content.fluids.transfer.GenericItemEmptying;
import com.simibubi.create.content.fluids.transfer.GenericItemFilling;
import com.simibubi.create.foundation.advancement.AdvancementBehaviour;
import com.simibubi.create.foundation.block.IBE;
import com.simibubi.create.foundation.blockEntity.ComparatorUtil;
import com.simibubi.create.foundation.fluid.FluidHelper;
import com.simibubi.create.foundation.fluid.FluidHelper.FluidExchange;
import com.simibubi.create.foundation.utility.Lang;
import io.github.fabricators_of_create.porting_lib.block.CustomSoundTypeBlock;
import io.github.fabricators_of_create.porting_lib.transfer.TransferUtil;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariantAttributes;
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.particles.BlockParticleOption;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.util.StringRepresentable;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.UseOnContext;
@@ -41,45 +49,48 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition.Builder;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.block.state.properties.EnumProperty;
import net.minecraft.world.level.block.state.properties.IntegerProperty;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.common.util.ForgeSoundType;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
public class SteelTankBlock extends Block implements IWrenchable, IBE<SteelTankBlockEntity> {
import java.util.function.Consumer;
public static final BooleanProperty TOP = BooleanProperty.create("top");
public static final BooleanProperty BOTTOM = BooleanProperty.create("bottom");
public static final EnumProperty<Shape> SHAPE = EnumProperty.create("shape", Shape.class);
import static com.simibubi.create.content.fluids.tank.FluidTankBlock.SILENCED_METAL;
private boolean creative;
public class SteelTankBlock extends Block implements IWrenchable, IBE<SteelTankBlockEntity>, CustomSoundTypeBlock {
public static SteelTankBlock regular(Properties p_i48440_1_) {
return new SteelTankBlock(p_i48440_1_, false);
public static final BooleanProperty TOP = BooleanProperty.create("top");
public static final BooleanProperty BOTTOM = BooleanProperty.create("bottom");
public static final EnumProperty<Shape> SHAPE = EnumProperty.create("shape", Shape.class);
public static final IntegerProperty LIGHT_LEVEL = IntegerProperty.create("light_level", 0, 15);
public static SteelTankBlock regular(Properties p_i48440_1_) {
return new SteelTankBlock(p_i48440_1_);
}
public static SteelTankBlock creative(Properties p_i48440_1_) {
return new SteelTankBlock(p_i48440_1_, true);
}
@Override
public void setPlacedBy(Level pLevel, BlockPos pPos, BlockState pState, LivingEntity pPlacer, ItemStack pStack) {
super.setPlacedBy(pLevel, pPos, pState, pPlacer, pStack);
AdvancementBehaviour.setPlacedBy(pLevel, pPos, pPlacer);
}
protected SteelTankBlock(Properties p_i48440_1_) {
super(setLightFunction(p_i48440_1_));
registerDefaultState(defaultBlockState().setValue(TOP, true)
.setValue(BOTTOM, true)
.setValue(SHAPE, Shape.WINDOW)
.setValue(LIGHT_LEVEL, 0));
}
private static Properties setLightFunction(Properties properties) {
return properties.lightLevel(state -> state.getValue(LIGHT_LEVEL));
}
protected SteelTankBlock(Properties p_i48440_1_, boolean creative) {
super(p_i48440_1_);
this.creative = creative;
registerDefaultState(defaultBlockState().setValue(TOP, true)
.setValue(BOTTOM, true)
.setValue(SHAPE, Shape.WINDOW));
}
public static boolean isTank(BlockState state) {
public static boolean isTank(BlockState state) {
return state.getBlock() instanceof SteelTankBlock;
}
@@ -89,7 +100,10 @@ public class SteelTankBlock extends Block implements IWrenchable, IBE<SteelTankB
return;
if (moved)
return;
withBlockEntityDo(world, pos, SteelTankBlockEntity::updateConnectivity);
Consumer<SteelTankBlockEntity> consumer = FluidTankItem.IS_PLACING_NBT
? SteelTankBlockEntity::queueConnectivityUpdate
: SteelTankBlockEntity::updateConnectivity;
withBlockEntityDo(world, pos, consumer);
}
@Override
@@ -97,17 +111,6 @@ public class SteelTankBlock extends Block implements IWrenchable, IBE<SteelTankB
p_206840_1_.add(TOP, BOTTOM, SHAPE);
}
@Override
public int getLightEmission(BlockState state, BlockGetter world, BlockPos pos) {
SteelTankBlockEntity tankAt = ConnectivityHandler.partAt(getBlockEntityType(), world, pos);
if (tankAt == null)
return 0;
SteelTankBlockEntity controllerTE = (SteelTankBlockEntity) tankAt.getControllerBE();
if (controllerTE == null || !controllerTE.window)
return 0;
return tankAt.luminosity;
}
@Override
public InteractionResult onWrenched(BlockState state, UseOnContext context) {
withBlockEntityDo(context.getLevel(), context.getClickedPos(), SteelTankBlockEntity::toggleWindows);
@@ -116,149 +119,143 @@ public class SteelTankBlock extends Block implements IWrenchable, IBE<SteelTankB
static final VoxelShape CAMPFIRE_SMOKE_CLIP = Block.box(0, 4, 0, 16, 16, 16);
@Override
public VoxelShape getCollisionShape(BlockState pState, BlockGetter pLevel, BlockPos pPos,
CollisionContext pContext) {
if (pContext == CollisionContext.empty())
return CAMPFIRE_SMOKE_CLIP;
return pState.getShape(pLevel, pPos);
@Override
public VoxelShape getCollisionShape(BlockState pState, BlockGetter pLevel, BlockPos pPos,
CollisionContext pContext) {
if (pContext == CollisionContext.empty())
return CAMPFIRE_SMOKE_CLIP;
return pState.getShape(pLevel, pPos);
}
@Override
public VoxelShape getBlockSupportShape(BlockState pState, BlockGetter pReader, BlockPos pPos) {
return Shapes.block();
}
@Override
public BlockState updateShape(BlockState pState, Direction pDirection, BlockState pNeighborState,
LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pNeighborPos) {
if (pDirection == Direction.DOWN && pNeighborState.getBlock() != this)
withBlockEntityDo(pLevel, pCurrentPos, FluidTankBlockEntity::updateBoilerTemperature);
return pState;
}
@Override
public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand,
BlockHitResult ray) {
ItemStack heldItem = player.getItemInHand(hand);
boolean onClient = world.isClientSide;
if (heldItem.isEmpty())
return InteractionResult.PASS;
if (!player.isCreative())
return InteractionResult.PASS;
FluidExchange exchange = null;
SteelTankBlockEntity be = ConnectivityHandler.partAt(getBlockEntityType(), world, pos);
if (be == null)
return InteractionResult.FAIL;
Direction direction = ray.getDirection();
Storage<FluidVariant> fluidTank = be.getFluidStorage(direction);
if (fluidTank == null)
return InteractionResult.PASS;
FluidStack prevFluidInTank = TransferUtil.firstCopyOrEmpty(fluidTank);
if (FluidHelper.tryEmptyItemIntoBE(world, player, hand, heldItem, be, direction))
exchange = FluidExchange.ITEM_TO_TANK;
else if (FluidHelper.tryFillItemFromBE(world, player, hand, heldItem, be, direction))
exchange = FluidExchange.TANK_TO_ITEM;
if (exchange == null) {
if (GenericItemEmptying.canItemBeEmptied(world, heldItem)
|| GenericItemFilling.canItemBeFilled(world, heldItem))
return InteractionResult.SUCCESS;
return InteractionResult.PASS;
}
@Override
public VoxelShape getBlockSupportShape(BlockState pState, BlockGetter pReader, BlockPos pPos) {
return Shapes.block();
SoundEvent soundevent = null;
BlockState fluidState = null;
FluidStack fluidInTank = TransferUtil.firstOrEmpty(fluidTank);
if (exchange == FluidExchange.ITEM_TO_TANK) {
Fluid fluid = fluidInTank.getFluid();
fluidState = fluid.defaultFluidState()
.createLegacyBlock();
soundevent = FluidVariantAttributes.getEmptySound(FluidVariant.of(fluid));
}
@Override
public BlockState updateShape(BlockState pState, Direction pDirection, BlockState pNeighborState,
LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pNeighborPos) {
if (pDirection == Direction.DOWN && pNeighborState.getBlock() != this)
withBlockEntityDo(pLevel, pCurrentPos, SteelTankBlockEntity::updateBoilerTemperature);
return pState;
if (exchange == FluidExchange.TANK_TO_ITEM) {
Fluid fluid = prevFluidInTank.getFluid();
fluidState = fluid.defaultFluidState()
.createLegacyBlock();
soundevent = FluidVariantAttributes.getFillSound(FluidVariant.of(fluid));
}
@Override
public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand,
BlockHitResult ray) {
ItemStack heldItem = player.getItemInHand(hand);
boolean onClient = world.isClientSide;
if (soundevent != null && !onClient) {
float pitch = Mth
.clamp(1 - (1f * fluidInTank.getAmount() / (FluidTankBlockEntity.getCapacityMultiplier() * 16)), 0, 1);
pitch /= 1.5f;
pitch += .5f;
pitch += (world.random.nextFloat() - .5f) / 4f;
world.playSound(null, pos, soundevent, SoundSource.BLOCKS, .5f, pitch);
}
if (heldItem.isEmpty())
return InteractionResult.PASS;
if (!player.isCreative() && !creative)
return InteractionResult.PASS;
if (!fluidInTank.isFluidEqual(prevFluidInTank)) {
if (be instanceof SteelTankBlockEntity) {
SteelTankBlockEntity controllerBE = be.getControllerBE();
if (controllerBE != null) {
if (fluidState != null && onClient) {
BlockParticleOption blockParticleData =
new BlockParticleOption(ParticleTypes.BLOCK, fluidState);
float level = (float) fluidInTank.getAmount() / TransferUtil.firstCapacity(fluidTank);
FluidExchange exchange = null;
SteelTankBlockEntity te = ConnectivityHandler.partAt(getBlockEntityType(), world, pos);
if (te == null)
return InteractionResult.FAIL;
boolean reversed = FluidVariantAttributes.isLighterThanAir(fluidInTank.getType());
if (reversed)
level = 1 - level;
LazyOptional<IFluidHandler> tankCapability = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY);
if (!tankCapability.isPresent())
return InteractionResult.PASS;
IFluidHandler fluidTank = tankCapability.orElse(null);
FluidStack prevFluidInTank = fluidTank.getFluidInTank(0)
.copy();
if (FluidHelper.tryEmptyItemIntoBE(world, player, hand, heldItem, te))
exchange = FluidExchange.ITEM_TO_TANK;
else if (FluidHelper.tryFillItemFromBE(world, player, hand, heldItem, te))
exchange = FluidExchange.TANK_TO_ITEM;
if (exchange == null) {
if (GenericItemEmptying.canItemBeEmptied(world, heldItem)
|| GenericItemFilling.canItemBeFilled(world, heldItem))
return InteractionResult.SUCCESS;
return InteractionResult.PASS;
}
SoundEvent soundevent = null;
BlockState fluidState = null;
FluidStack fluidInTank = tankCapability.map(fh -> fh.getFluidInTank(0))
.orElse(FluidStack.EMPTY);
if (exchange == FluidExchange.ITEM_TO_TANK) {
Fluid fluid = fluidInTank.getFluid();
fluidState = fluid.defaultFluidState()
.createLegacyBlock();
soundevent = FluidHelper.getEmptySound(fluidInTank);
}
if (exchange == FluidExchange.TANK_TO_ITEM) {
Fluid fluid = prevFluidInTank.getFluid();
fluidState = fluid.defaultFluidState()
.createLegacyBlock();
soundevent = FluidHelper.getFillSound(prevFluidInTank);
}
if (soundevent != null && !onClient) {
float pitch = Mth
.clamp(1 - (1f * fluidInTank.getAmount() / (SteelTankBlockEntity.getCapacityMultiplier() * 16)), 0, 1);
pitch /= 1.5f;
pitch += .5f;
pitch += (world.random.nextFloat() - .5f) / 4f;
world.playSound(null, pos, soundevent, SoundSource.BLOCKS, .5f, pitch);
}
if (!fluidInTank.isFluidStackIdentical(prevFluidInTank)) {
if (te instanceof SteelTankBlockEntity) {
SteelTankBlockEntity controllerTE = (SteelTankBlockEntity) ((SteelTankBlockEntity) te).getControllerBE();
if (controllerTE != null) {
if (fluidState != null && onClient) {
BlockParticleOption blockParticleData =
new BlockParticleOption(ParticleTypes.BLOCK, fluidState);
float level = (float) fluidInTank.getAmount() / fluidTank.getTankCapacity(0);
boolean reversed = fluidInTank.getFluid()
.getFluidType()
.isLighterThanAir();
if (reversed)
level = 1 - level;
Vec3 vec = ray.getLocation();
vec = new Vec3(vec.x, controllerTE.getBlockPos()
.getY() + level * (controllerTE.height - .5f) + .25f, vec.z);
Vec3 motion = player.position()
.subtract(vec)
.scale(1 / 20f);
vec = vec.add(motion);
world.addParticle(blockParticleData, vec.x, vec.y, vec.z, motion.x, motion.y, motion.z);
return InteractionResult.SUCCESS;
}
controllerTE.sendDataImmediately();
controllerTE.setChanged();
Vec3 vec = ray.getLocation();
vec = new Vec3(vec.x, controllerBE.getBlockPos()
.getY() + level * (controllerBE.height - .5f) + .25f, vec.z);
Vec3 motion = player.position()
.subtract(vec)
.scale(1 / 20f);
vec = vec.add(motion);
world.addParticle(blockParticleData, vec.x, vec.y, vec.z, motion.x, motion.y, motion.z);
return InteractionResult.SUCCESS;
}
controllerBE.sendDataImmediately();
controllerBE.setChanged();
}
}
return InteractionResult.SUCCESS;
}
@Override
public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
if (state.hasBlockEntity() && (state.getBlock() != newState.getBlock() || !newState.hasBlockEntity())) {
BlockEntity te = world.getBlockEntity(pos);
if (!(te instanceof SteelTankBlockEntity))
return;
SteelTankBlockEntity tankTE = (SteelTankBlockEntity) te;
world.removeBlockEntity(pos);
ConnectivityHandler.splitMulti(tankTE);
}
}
return InteractionResult.SUCCESS;
}
@Override
public Class<SteelTankBlockEntity> getBlockEntityClass() {
@Override
public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
if (state.hasBlockEntity() && (state.getBlock() != newState.getBlock() || !newState.hasBlockEntity())) {
BlockEntity be = world.getBlockEntity(pos);
if (!(be instanceof FluidTankBlockEntity))
return;
FluidTankBlockEntity tankBE = (FluidTankBlockEntity) be;
world.removeBlockEntity(pos);
ConnectivityHandler.splitMulti(tankBE);
}
}
@Override
public Class<SteelTankBlockEntity> getBlockEntityClass() {
return SteelTankBlockEntity.class;
}
@Override
public BlockEntityType<? extends SteelTankBlockEntity> getBlockEntityType() {
return creative ? TFMGBlockEntities.STEEL_FLUID_TANK.get() : TFMGBlockEntities.STEEL_FLUID_TANK.get();
}
@Override
public BlockEntityType<? extends SteelTankBlockEntity> getBlockEntityType() {
return TFMGBlockEntities.STEEL_FLUID_TANK.get();
}
@Override
public BlockState mirror(BlockState state, Mirror mirror) {
@@ -310,15 +307,10 @@ public class SteelTankBlock extends Block implements IWrenchable, IBE<SteelTankB
}
}
// Tanks are less noisy when placed in batch
public static final SoundType SILENCED_METAL =
new ForgeSoundType(0.1F, 1.5F, () -> SoundEvents.METAL_BREAK, () -> SoundEvents.METAL_STEP,
() -> SoundEvents.METAL_PLACE, () -> SoundEvents.METAL_HIT, () -> SoundEvents.METAL_FALL);
@Override
public SoundType getSoundType(BlockState state, LevelReader world, BlockPos pos, Entity entity) {
SoundType soundType = super.getSoundType(state, world, pos, entity);
if (entity != null && entity.getPersistentData()
SoundType soundType = getSoundType(state);
if (entity != null && entity.getExtraCustomData()
.contains("SilenceTankSound"))
return SILENCED_METAL;
return soundType;

View File

@@ -1,47 +1,36 @@
package com.drmangotea.createindustry.blocks.tanks;
import com.drmangotea.createindustry.CreateTFMG;
import com.drmangotea.createindustry.blocks.machines.oil_processing.distillation.controller.DistillationControllerBlock;
import com.drmangotea.createindustry.blocks.machines.oil_processing.distillation.output.DistillationOutputBlock;
import com.drmangotea.createindustry.registry.TFMGBlocks;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.api.connectivity.ConnectivityHandler;
import com.simibubi.create.content.decoration.steamWhistle.WhistleBlock;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
import com.simibubi.create.content.fluids.tank.BoilerHeaters;
import com.simibubi.create.content.fluids.tank.FluidTankBlock;
import com.simibubi.create.content.fluids.tank.FluidTankBlockEntity;
import com.simibubi.create.content.kinetics.steamEngine.SteamEngineBlock;
import com.simibubi.create.foundation.blockEntity.IMultiBlockEntityContainer;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser;
import com.simibubi.create.infrastructure.config.AllConfigs;
import net.minecraft.ChatFormatting;
import io.github.fabricators_of_create.porting_lib.transfer.TransferUtil;
import io.github.fabricators_of_create.porting_lib.transfer.fluid.FluidTank;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import io.github.fabricators_of_create.porting_lib.util.LazyOptional;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariantAttributeHandler;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariantAttributes;
import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction;
import net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidType;
import net.minecraftforge.fluids.IFluidTank;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -53,7 +42,7 @@ public class SteelTankBlockEntity extends FluidTankBlockEntity implements IHaveG
private static final int MAX_SIZE = 3;
protected LazyOptional<IFluidHandler> fluidCapability;
protected LazyOptional<FluidTank> fluidCapability;
protected boolean forceFluidLevelUpdate;
public FluidTank tankInventory;
protected BlockPos controller;
@@ -161,15 +150,14 @@ public class SteelTankBlockEntity extends FluidTankBlockEntity implements IHaveG
removeController(true);
lastKnownPos = worldPosition;
}
protected void onFluidStackChanged(FluidStack newFluidStack) {
if (!hasLevel())
return;
FluidType attributes = newFluidStack.getFluid()
.getFluidType();
int luminosity = (int) (attributes.getLightLevel(newFluidStack) / 1.2f);
boolean reversed = attributes.isLighterThanAir();
FluidVariantAttributeHandler handler = FluidVariantAttributes.getHandlerOrDefault(newFluidStack.getFluid());
FluidVariant variant = newFluidStack.getType();
int luminosity = (int) (handler.getLuminance(variant) / 1.2f);
boolean reversed = handler.isLighterThanAir(variant);
int maxY = (int) ((getFillState() * height) + 1);
for (int yOffset = 0; yOffset < height; yOffset++) {
@@ -226,9 +214,9 @@ public class SteelTankBlockEntity extends FluidTankBlockEntity implements IHaveG
public void applyFluidTankSize(int blocks) {
tankInventory.setCapacity(blocks * getCapacityMultiplier());
int overflow = tankInventory.getFluidAmount() - tankInventory.getCapacity();
long overflow = tankInventory.getFluidAmount() - tankInventory.getCapacity();
if (overflow > 0)
tankInventory.drain(overflow, FluidAction.EXECUTE);
tankInventory.extract(tankInventory.variant, overflow, Transaction.openOuter());
forceFluidLevelUpdate = true;
}
@@ -421,7 +409,7 @@ public class SteelTankBlockEntity extends FluidTankBlockEntity implements IHaveG
}
public void refreshCapability() {
LazyOptional<IFluidHandler> oldCap = fluidCapability;
LazyOptional<FluidTank> oldCap = fluidCapability;
fluidCapability = LazyOptional.of(() -> handlerForCapability());
oldCap.invalidate();
}
@@ -430,7 +418,7 @@ public class SteelTankBlockEntity extends FluidTankBlockEntity implements IHaveG
private IFluidHandler handlerForCapability() {
private FluidTank handlerForCapability() {
return isController() ?
tankInventory
: getControllerBE() != null ? getControllerBE().handlerForCapability() : tankInventory;
@@ -461,17 +449,14 @@ public class SteelTankBlockEntity extends FluidTankBlockEntity implements IHaveG
@Override
public boolean addToGoggleTooltip(List<Component> tooltip, boolean isPlayerSneaking) {
SteelTankBlockEntity controllerTE = getControllerBE();
SteelTankBlockEntity controllerBE = getControllerBE();
if(isDistillationTower)
if (isDistillationTower)
return false;
if(getControllerBE()!=null)
if(getControllerBE().isDistillationTower)
return false;
if (controllerBE != null && controllerBE.isDistillationTower)
return true;
return containedFluidTooltip(tooltip, isPlayerSneaking,
controllerTE.getCapability(ForgeCapabilities.FLUID_HANDLER));
controllerBE.getFluidStorage(null));
}
@Override
@@ -501,7 +486,10 @@ public class SteelTankBlockEntity extends FluidTankBlockEntity implements IHaveG
tankInventory.setCapacity(getTotalTankSize() * getCapacityMultiplier());
tankInventory.readFromNBT(compound.getCompound("TankContent"));
if (tankInventory.getSpace() < 0)
tankInventory.drain(-tankInventory.getSpace(), FluidAction.EXECUTE);
try (Transaction t = TransferUtil.getTransaction()) {
tankInventory.extract(tankInventory.variant, -tankInventory.getSpace(), t);
t.commit();
}
}
@@ -576,24 +564,12 @@ public class SteelTankBlockEntity extends FluidTankBlockEntity implements IHaveG
forceFluidLevelUpdate = false;
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
if (!fluidCapability.isPresent())
refreshCapability();
if (cap == ForgeCapabilities.FLUID_HANDLER)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
@Override
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
//registerAwardables(behaviours, AllAdvancements.STEAM_ENGINE_MAXED, AllAdvancements.PIPE_ORGAN);
}
public IFluidTank getTankInventory() {
public FluidTank getTankInventory() {
return tankInventory;
}
@@ -605,7 +581,7 @@ public class SteelTankBlockEntity extends FluidTankBlockEntity implements IHaveG
return MAX_SIZE;
}
public static int getCapacityMultiplier() {
public static long getCapacityMultiplier() {
return AllConfigs.server().fluids.fluidTankCapacity.get() * 1000;
}
@@ -705,7 +681,7 @@ public class SteelTankBlockEntity extends FluidTankBlockEntity implements IHaveG
}
@Override
public int getTankSize(int tank) {
public long getTankSize(int tank) {
return getCapacityMultiplier();
}
@@ -715,7 +691,7 @@ public class SteelTankBlockEntity extends FluidTankBlockEntity implements IHaveG
}
@Override
public IFluidTank getTank(int tank) {
public FluidTank getTank(int tank) {
return tankInventory;
}

View File

@@ -3,6 +3,7 @@ package com.drmangotea.createindustry.blocks.tanks;
import com.drmangotea.createindustry.registry.TFMGBlockEntities;
import com.simibubi.create.api.connectivity.ConnectivityHandler;
import io.github.fabricators_of_create.porting_lib.util.FluidStack;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
@@ -15,7 +16,6 @@ import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.fluids.FluidStack;
public class SteelTankItem extends BlockItem {
@@ -121,10 +121,10 @@ public class SteelTankItem extends BlockItem {
if (SteelTankBlock.isTank(blockState))
continue;
BlockPlaceContext context = BlockPlaceContext.at(ctx, offsetPos, face);
player.getPersistentData()
player.getExtraCustomData()
.putBoolean("SilenceTankSound", true);
super.place(context);
player.getPersistentData()
player.getExtraCustomData()
.remove("SilenceTankSound");
}
}

View File

@@ -1,20 +1,19 @@
package com.drmangotea.createindustry.config;
import com.drmangotea.createindustry.CreateTFMG;
import com.simibubi.create.content.kinetics.BlockStressValues;
import com.simibubi.create.foundation.config.ConfigBase;
import net.minecraftforge.api.ModLoadingContext;
import net.minecraftforge.api.fml.event.config.ModConfigEvents;
import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.event.config.ModConfigEvent;
import org.apache.commons.lang3.tuple.Pair;
import java.util.EnumMap;
import java.util.Map;
import java.util.function.Supplier;
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class TFMGConfigs {
private static final Map<ModConfig.Type, ConfigBase> CONFIGS = new EnumMap<>(ModConfig.Type.class);
@@ -42,27 +41,28 @@ public class TFMGConfigs {
return config;
}
public static void register(ModLoadingContext context) {
public static void register() {
server = register(ServerConfig::new, ModConfig.Type.SERVER);
for (Map.Entry<ModConfig.Type, ConfigBase> pair : CONFIGS.entrySet())
context.registerConfig(pair.getKey(), pair.getValue().specification);
ModLoadingContext.registerConfig(CreateTFMG.MOD_ID, pair.getKey(), pair.getValue().specification);
BlockStressValues.registerProvider(context.getActiveNamespace(), server().stressValues);
BlockStressValues.registerProvider(CreateTFMG.MOD_ID, server().stressValues);
ModConfigEvents.loading(CreateTFMG.MOD_ID).register(TFMGConfigs::onLoad);
ModConfigEvents.loading(CreateTFMG.MOD_ID).register(TFMGConfigs::onReload);
}
@SubscribeEvent
public static void onLoad(ModConfigEvent.Loading event) {
public static void onLoad(ModConfig modConfig) {
for (ConfigBase config : CONFIGS.values())
if (config.specification == event.getConfig()
if (config.specification == modConfig
.getSpec())
config.onLoad();
}
@SubscribeEvent
public static void onReload(ModConfigEvent.Reloading event) {
public static void onReload(ModConfig modConfig) {
for (ConfigBase config : CONFIGS.values())
if (config.specification == event.getConfig()
if (config.specification == modConfig
.getSpec())
config.onReload();
}

View File

@@ -0,0 +1,15 @@
package com.drmangotea.createindustry.data;
import com.drmangotea.createindustry.base.TFMGLangPartials;
import com.simibubi.create.foundation.data.LangMerger;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import static com.drmangotea.createindustry.CreateTFMG.*;
public class CreateTFMGData implements DataGeneratorEntrypoint {
@Override
public void onInitializeDataGenerator(FabricDataGenerator generator) {
generator.addProvider(true, new LangMerger(generator, MOD_ID, NAME, TFMGLangPartials.values()));
}
}

View File

@@ -0,0 +1,18 @@
package com.drmangotea.createindustry.events;
import com.drmangotea.createindustry.CreateTFMGClient;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.minecraft.client.Minecraft;
public class ClientEvents {
public static void onTick(Minecraft client) {
CreateTFMGClient.ADVANCED_POTATO_CANNON_RENDER_HANDLER.tick();
CreateTFMGClient.FLAMETHROWER_RENDER_HANDLER.tick();
CreateTFMGClient.QUAD_POTATO_CANNON_RENDER_HANDLER.tick();
}
public static void register() {
ClientTickEvents.END_CLIENT_TICK.register(ClientEvents::onTick);
}
}

View File

@@ -0,0 +1,23 @@
package com.drmangotea.createindustry.events;
import com.drmangotea.createindustry.CreateTFMG;
import com.drmangotea.createindustry.worldgen.TFMGConfiguredFeatures;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.minecraft.core.Holder;
import net.minecraft.server.MinecraftServer;
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
public class CommonEvents {
public static void serverStarting(MinecraftServer event)
{
CreateTFMG.LOGGER.info("YEEEHAAW");
}
public static void register() {
final Holder<PlacedFeature> initializeOil = TFMGConfiguredFeatures.OIL_PLACED;
final Holder<PlacedFeature> initializeSimulatedOil = TFMGConfiguredFeatures.OIL_DEPOSIT_PLACED;
ServerLifecycleEvents.SERVER_STARTED.register(CommonEvents::serverStarting);
}
}

View File

@@ -1,22 +0,0 @@
package com.drmangotea.createindustry.items;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.material.Fluid;
import org.jetbrains.annotations.Nullable;
public class BadFuelBucketItem extends BucketItem {
public BadFuelBucketItem(Fluid p_40689_, Properties p_40690_) {
super(p_40689_, p_40690_);
}
public BadFuelBucketItem(java.util.function.Supplier<? extends Fluid> supplier, Item.Properties builder) {
super(supplier,builder);
}
@Override
public int getBurnTime(ItemStack itemStack, @Nullable RecipeType<?> recipeType) {
return 200;
}
}

View File

@@ -1,25 +0,0 @@
package com.drmangotea.createindustry.items;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.block.Block;
import org.jetbrains.annotations.Nullable;
public class CoalCokeBlockItem extends BlockItem {
public CoalCokeBlockItem(Block p_40565_, Properties p_40566_) {
super(p_40565_, p_40566_);
}
@Override
public int getBurnTime(ItemStack itemStack, @Nullable RecipeType<?> recipeType) {
return 28800;
}
}

View File

@@ -1,27 +0,0 @@
package com.drmangotea.createindustry.items;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.block.Block;
import net.minecraftforge.common.property.Properties;
import org.jetbrains.annotations.Nullable;
public class CoalCokeItem extends Item {
public CoalCokeItem(Properties p_40566_) {
super( p_40566_);
}
@Override
public int getBurnTime(ItemStack itemStack, @Nullable RecipeType<?> recipeType) {
return 3200;
}
}

View File

@@ -1,25 +0,0 @@
package com.drmangotea.createindustry.items;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.block.Block;
import org.jetbrains.annotations.Nullable;
public class FossilstoneItem extends BlockItem {
public FossilstoneItem(Block p_40565_, Properties p_40566_) {
super(p_40565_, p_40566_);
}
@Override
public int getBurnTime(ItemStack itemStack, @Nullable RecipeType<?> recipeType) {
return 4000;
}
}

View File

@@ -1,21 +0,0 @@
package com.drmangotea.createindustry.items;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.material.Fluid;
import org.jetbrains.annotations.Nullable;
public class OilBucketItem extends BucketItem {
public OilBucketItem(Fluid p_40689_, Properties p_40690_) {
super(p_40689_, p_40690_);
}
public OilBucketItem(java.util.function.Supplier<? extends Fluid> supplier, Properties builder) {
super(supplier,builder);
}
@Override
public int getBurnTime(ItemStack itemStack, @Nullable RecipeType<?> recipeType) {
return 800;
}
}

View File

@@ -9,9 +9,12 @@ import com.simibubi.create.content.equipment.armor.BacktankUtil;
import com.simibubi.create.content.equipment.potatoCannon.*;
import com.simibubi.create.content.equipment.zapper.ShootableGadgetItemMethods;
import com.simibubi.create.foundation.item.CustomArmPoseItem;
import com.simibubi.create.foundation.item.render.SimpleCustomRenderer;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.infrastructure.config.AllConfigs;
import io.github.fabricators_of_create.porting_lib.item.EntitySwingListenerItem;
import io.github.fabricators_of_create.porting_lib.item.ReequipAnimationItem;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel.ArmPose;
import net.minecraft.client.player.AbstractClientPlayer;
@@ -29,17 +32,13 @@ import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import org.jetbrains.annotations.Nullable;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Predicate;
public class AdvancedPotatoCannonItem extends ProjectileWeaponItem implements CustomArmPoseItem {
public class AdvancedPotatoCannonItem extends ProjectileWeaponItem implements CustomArmPoseItem,
EntitySwingListenerItem, ReequipAnimationItem {
public static ItemStack CLIENT_CURRENT_AMMO = ItemStack.EMPTY;
public static final int MAX_DAMAGE = 500;
@@ -173,7 +172,7 @@ public class AdvancedPotatoCannonItem extends ProjectileWeaponItem implements Cu
}
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
public static Optional<ItemStack> getAmmoforPreview(ItemStack cannon) {
if (AnimationTickHolder.getTicks() % 3 != 0)
return Optional.of(CLIENT_CURRENT_AMMO)
@@ -222,10 +221,6 @@ public class AdvancedPotatoCannonItem extends ProjectileWeaponItem implements Cu
return 15;
}
@Override
@OnlyIn(Dist.CLIENT)
public void initializeClient(Consumer<IClientItemExtensions> consumer) {
consumer.accept(SimpleCustomRenderer.create(this, new AdvancedPotatoCannonItemRenderer()));
}
}

View File

@@ -18,8 +18,6 @@ import net.minecraft.world.item.ItemStack;
public class AdvancedPotatoCannonItemRenderer extends CustomRenderedItemModelRenderer {
@Override
protected void render(ItemStack stack, CustomRenderedItemModel model, PartialItemModelRenderer renderer,
TransformType transformType, PoseStack ms, MultiBufferSource buffer, int light, int overlay) {

View File

@@ -4,12 +4,12 @@ import com.drmangotea.createindustry.CreateTFMG;
import com.drmangotea.createindustry.CreateTFMGClient;
import com.simibubi.create.content.equipment.zapper.ShootGadgetPacket;
import com.simibubi.create.content.equipment.zapper.ShootableGadgetRenderHandler;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
public class AdvancedPotatoCannonPacket extends ShootGadgetPacket {
@@ -46,7 +46,7 @@ public class AdvancedPotatoCannonPacket extends ShootGadgetPacket {
@Override
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
protected void handleAdditional() {
CreateTFMG.LOGGER.debug("AAAAAAAAAAAAAAAAAAAAAAAAAE");
@@ -54,7 +54,7 @@ public class AdvancedPotatoCannonPacket extends ShootGadgetPacket {
}
@Override
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
protected ShootableGadgetRenderHandler getHandler() {
return CreateTFMGClient.ADVANCED_POTATO_CANNON_RENDER_HANDLER;
}

View File

@@ -2,13 +2,16 @@ package com.drmangotea.createindustry.items.weapons.advanced_potato_cannon.proje
import com.drmangotea.createindustry.base.util.TFMGUtils;
import com.drmangotea.createindustry.items.weapons.explosives.pipe_bomb.PipeBomb;
import com.drmangotea.createindustry.registry.TFMGEntityTypes;
import com.drmangotea.createindustry.registry.TFMGItems;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityDimensions;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.projectile.ThrowableItemProjectile;
@@ -74,8 +77,8 @@ public class NapalmPotato extends ThrowableItemProjectile {
}
@SuppressWarnings("unchecked")
public static EntityType.Builder<?> build(EntityType.Builder<?> builder) {
EntityType.Builder<NapalmPotato> entityBuilder = (EntityType.Builder<NapalmPotato>) builder;
return entityBuilder.sized(.25f, .25f);
public static FabricEntityTypeBuilder<NapalmPotato> build(FabricEntityTypeBuilder<?> builder) {
FabricEntityTypeBuilder<NapalmPotato> entityBuilder = (FabricEntityTypeBuilder<NapalmPotato>) builder;
return entityBuilder.dimensions(EntityDimensions.scalable(.25f, .25f));
}
}

View File

@@ -4,6 +4,8 @@ package com.drmangotea.createindustry.items.weapons.advanced_potato_cannon.proje
import com.drmangotea.createindustry.registry.TFMGItems;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.block.model.ItemTransforms;
import net.minecraft.client.renderer.entity.EntityRenderer;
@@ -12,10 +14,8 @@ import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
@Environment(EnvType.CLIENT)
public class NapalmPotatoRenderer extends EntityRenderer<NapalmPotato> {
private final ItemRenderer itemRenderer;

Some files were not shown because too many files have changed in this diff Show More