63 Commits

Author SHA1 Message Date
d9dded9726 Remove unused lines
Some checks failed
build / build (17) (push) Failing after 2m17s
build / upload-release (push) Has been skipped
2025-01-21 17:23:59 +05:00
9cb8f2d356 Change version
All checks were successful
build / build (17) (push) Successful in 6m15s
build / upload-release (push) Successful in 14s
2025-01-21 16:57:06 +05:00
66ece416a6 Set 1G ram 2025-01-21 16:56:29 +05:00
5df46a0fad IDK
Some checks failed
build / build (17) (push) Failing after 6m26s
build / upload-release (push) Has been skipped
2025-01-21 16:49:39 +05:00
2b0a1a0759 Update workflow 2025-01-21 15:19:33 +05:00
8c8f995b04 Update workflow
Some checks failed
build / build (17) (push) Failing after 9m20s
build / upload-release (push) Has been skipped
2025-01-21 15:08:20 +05:00
4f78c9bd03 Update Java
Some checks failed
build / build (17) (push) Failing after 5m5s
build / upload-release (push) Has been cancelled
2025-01-21 14:58:17 +05:00
6032f8af2b Change Entity to LivingEntity 2025-01-21 14:58:06 +05:00
fc5d12980f Update Mixins from Redirect to Update Statement
Some checks failed
build / build (17) (push) Failing after 4m45s
build / upload-release (push) Has been skipped
2025-01-21 14:45:49 +05:00
824a2cf0a3 MORE UPDATES
Some checks failed
build / build (17) (push) Failing after 4m11s
build / upload-release (push) Has been skipped
2025-01-21 04:39:04 +05:00
a112b38b1c MORE UPDATES 2025-01-21 04:32:33 +05:00
2a5f442a78 MORE UPDATES 2025-01-21 04:22:27 +05:00
d3fea6ca2d Update gradle 2025-01-21 04:21:35 +05:00
baba04d179 Update workflow file 2025-01-21 04:11:54 +05:00
4f0c236cff Update workflow file 2025-01-21 04:05:22 +05:00
9f80bf51f0 Update version and build files 2025-01-21 04:05:06 +05:00
b5b84d21fc Update workflow file
Some checks failed
build / build (21) (push) Successful in 4m27s
build / upload-release (push) Failing after 8s
2025-01-21 03:43:53 +05:00
212c1c11a6 Update workflow file
Some checks failed
build / build (21) (push) Successful in 13m57s
build / upload-release (push) Failing after 8s
2025-01-21 03:28:15 +05:00
908701152e Update workflow file
Some checks failed
build / upload-release (push) Has been cancelled
build / build (21) (push) Has been cancelled
2025-01-21 03:24:20 +05:00
ac3d2b8632 Update workflow file
All checks were successful
build / build (21) (push) Successful in 14m25s
build / upload-release (push) Successful in 23s
2025-01-21 03:06:25 +05:00
3adfd20d72 Rollback
Some checks failed
build / upload-release (push) Blocked by required conditions
build / build (17) (push) Has been cancelled
2025-01-21 03:03:53 +05:00
bb1a6be978 Rollback
Some checks failed
build / upload-release (push) Blocked by required conditions
build / build (17) (push) Has been cancelled
2025-01-21 02:56:22 +05:00
58125c04df Again update workflow
Some checks failed
build / upload-release (push) Blocked by required conditions
build / build (17) (push) Has been cancelled
2025-01-21 02:55:40 +05:00
c52aebf2a8 Again update workflow
Some checks failed
build / build (17) (push) Has been cancelled
2025-01-21 02:47:25 +05:00
ccd632e0c3 Again update workflow
Some checks failed
build / build (push) Failing after 20s
2025-01-21 02:46:41 +05:00
956d2e6b53 Again update workflow
Some checks failed
build / build (push) Failing after 10s
2025-01-21 02:45:47 +05:00
ed146f441d Test 2025-01-21 02:45:24 +05:00
be9a4bdd59 Change workflow file
Some checks failed
build / build (17) (push) Failing after 2m44s
2025-01-21 02:39:28 +05:00
2c386caace Add dependency
Some checks failed
build / build (17) (push) Has been cancelled
2025-01-20 22:16:53 +05:00
b749efbbac Create get from simibubi 2024-03-12 12:08:13 +05:00
8f01df0971 More fixxxes 2024-03-12 12:04:28 +05:00
3683405780 Change create build 2024-03-12 11:37:18 +05:00
f4625f84b3 Fix? again 2024-03-12 11:37:03 +05:00
3a3b3b11fa Fix? oxygen Ad Astra 2024-03-12 10:58:41 +05:00
23667171ae Remove unusual? method 2024-03-12 10:58:27 +05:00
9d811a82af Fix? temperature for Ad Astra 2024-03-12 10:43:02 +05:00
fb97097b67 Update Gradle to 8.3 2024-03-12 09:54:58 +05:00
328ca781ff Update loom 2024-03-12 09:50:09 +05:00
429b444058 Get Create Fabric from Modrinth 2024-03-12 09:47:54 +05:00
be08c76edf Get Ad Astra from Modrinth 2024-03-12 09:34:48 +05:00
7e65f5d748 Set variable version ThinAir 2024-03-12 09:32:40 +05:00
1079b588e5 Add version for ThinAir 2024-03-12 09:30:56 +05:00
301bcad666 Update version of Create 2024-03-12 09:29:48 +05:00
2889f710fb Remove spaces 2023-11-12 23:19:23 +05:00
8862a20b6b Remove spaces 2023-11-12 23:19:12 +05:00
45c772db96 Remove force depends 2023-11-12 23:19:02 +05:00
8bed1bc0c9 Import from Create Astra Fabric 2023-11-12 23:18:44 +05:00
8d34b157ca Import from Create Astra Fabric 2023-11-12 23:18:42 +05:00
b584e7d956 Rewrite for compatibility 2023-11-12 23:18:17 +05:00
570842eab6 Mixin Loader 2023-11-12 23:17:59 +05:00
6915429319 Add Mixin Loader 2023-11-12 23:17:44 +05:00
eb4bc5643b Add Ad Astra 2023-11-12 23:17:26 +05:00
b1dd1f0d95 Add Ad Astra 2023-11-12 23:17:12 +05:00
1c5d916ff4 Add Ad Astra 2023-11-12 23:16:54 +05:00
46a668339c Move maven from CurseForge to Modrinth 2023-11-09 22:35:15 +05:00
58a5175ed9 Rewrite Air function 2023-11-09 22:25:08 +05:00
7ccdf8d063 Update depend Thin Air 2023-11-09 22:24:48 +05:00
5bf98c8248 Make lower version of loader 2023-11-08 20:50:40 +05:00
3e3ab91895 Add depend Thin Air 2023-11-08 20:50:20 +05:00
2bbd719a5f Update Logo
Some checks failed
build / build (17) (push) Has been cancelled
2023-11-03 23:16:13 +05:00
44b85603da Add UI render in Bad Air (thanx to silopante)
Some checks failed
build / build (17) (push) Has been cancelled
2023-11-01 13:24:41 +05:00
36942712f1 Merge remote-tracking branch 'origin/main'
Some checks failed
build / build (17) (push) Failing after 1m8s
2023-10-31 23:04:09 +05:00
fd5ef6c9f7 Little updates 2023-10-31 23:02:15 +05:00
16 changed files with 353 additions and 153 deletions

View File

@ -6,36 +6,63 @@ on:
jobs:
build:
env:
RUN_NUMBER: ${{ gitea.run_number }}
strategy:
matrix:
java: [ 17 ]
java: [ '17' ]
runs-on: ubuntu-latest
steps:
- name: checkout repository
uses: https://git.bitheaven.ru/actions/checkout@v2
- name: Checkout Code
uses: actions/checkout@v4
- name: setup jdk ${{ matrix.java }}
uses: https://git.bitheaven.ru/actions/setup-java@v1
- name: Setup JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
distribution: 'oracle'
java-version: ${{ matrix.java }}
cache: 'gradle'
- uses: https://git.bitheaven.ru/actions/cache@v2
- name: Loom Cache
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/loom-cache
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/gradle-wrapper.properties') }}
restore-keys: ${{ runner.os }}-gradle
path: "**/.gradle/loom-cache"
key: "${{ runner.os }}-gradle-${{ hashFiles('**/libs.versions.*', '**/*.gradle*', '**/gradle-wrapper.properties') }}"
restore-keys: "${{ runner.os }}-gradle-"
- name: make gradle wrapper executable
run: chmod +x ./gradlew
- name: build
run: ./gradlew build
- name: capture build artifacts
uses: https://git.bitheaven.ru/actions/upload-artifact@v2
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
name: Artifacts
path: build/libs/
gradle-home-cache-cleanup: true
- name: Validate Gradle Wrapper Integrity
uses: gradle/wrapper-validation-action@v2
- name: Build with Gradle
run: ./gradlew clean build --no-daemon
- name: Upload Mod JAR
uses: actions/upload-artifact@v3
with:
name: create-air-fabric
path: build/libs/*.jar
upload-release:
runs-on: ubuntu-latest
needs: build
steps:
- name: Download build artifact
uses: actions/download-artifact@v3
with:
name: create-air-fabric
- name: Make release
uses: akkuman/gitea-release-action@v1
with:
name: Create Air Fabric 1.0-${{ gitea.run_number }} for 1.20.1
tag_name: createairfabric-1.0+1.20.1-${{ gitea.run_number }}
md5sum: true
sha256sum: true
files: |-
*.jar
# build/libs/**

View File

@ -1,88 +1,88 @@
plugins {
id 'fabric-loom' version '1.2-SNAPSHOT'
alias libs.plugins.fabric.loom
id "io.github.p03w.machete" version "1.+" // automatic jar compressing on build
id 'maven-publish'
}
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
base {
archivesName = project.archives_base_name
}
archivesBaseName = project.archives_base_name
String buildNumber = System.getenv("RUN_NUMBER")
version = "${mod_version}+${libs.versions.minecraft.get()}" + (buildNumber != null ? "-${buildNumber}" : "")
group = project.maven_group
String buildNumber = System.getenv("GITEA_RUN_NUMBER")
version = "${mod_version}+${minecraft_version}" + (buildNumber != null ? "-${buildNumber}" : "")
repositories {
// Add repositories to retrieve artifacts from in here.
// You should only use this when depending on other mods because
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.
maven { url = "https://maven.shedaniel.me/" } // Cloth Config, REI
maven { url = "https://dvs1.progwml6.com/files/maven/" } // 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://cursemaven.com" } // 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 { // Fabric ASM for Porting Lib
url = "https://jitpack.io/"
content { includeGroupAndSubgroups("com.github") }
}
maven { url = "https://maven.tterrag.com/" } // Flywheel
maven { url = "https://mvn.devos.one/snapshots/" } // Create and several dependencies
maven { url = "https://mvn.devos.one/releases/" } // Porting Lib releases
maven { url = "https://raw.githubusercontent.com/Fuzss/modresources/main/maven" } // Forge Config API Port
exclusiveContent {
forRepository {
maven {
url 'https://www.cursemaven.com'
content {
includeGroup "curse.maven"
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
filter {
includeGroup "maven.modrinth"
}
}
}
// All the dependencies are declared at gradle/libs.version.toml and referenced with "libs.<id>"
dependencies {
// To change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings(loom.layered {
it.mappings("org.quiltmc:quilt-mappings:${minecraft_version}+build.${qm_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}")
minecraft libs.minecraft
mappings loom.layered {
mappings "org.quiltmc:quilt-mappings:${libs.versions.quilt.mappings.get()}:intermediary-v2"
officialMojangMappings()
}
modImplementation libs.fabric.loader
// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation("net.fabricmc.fabric-api:fabric-api:${fabric_api_version}")
modImplementation libs.fabric.api
// Create - dependencies are added transitively
modImplementation("com.simibubi.create:create-fabric-${minecraft_version}:${create_version}")
modImplementation libs.create
// Thin Air
modImplementation("curse.maven:new-thin-air-878379:4611944")
modImplementation libs.thinair
// Ad Astra
modImplementation libs.adastra
modImplementation libs.botarium
// Development QOL
modLocalRuntime("maven.modrinth:lazydfu:${lazydfu_version}")
modLocalRuntime("com.terraformersmc:modmenu:${modmenu_version}")
modLocalRuntime libs.lazydfu
modLocalRuntime libs.modmenu
// Recipe Viewers - Create Fabric supports JEI, REI, and EMI.
// See root gradle.properties to choose which to use at runtime.
switch (recipe_viewer.toLowerCase(Locale.ROOT)) {
case "jei": modLocalRuntime("mezz.jei:jei-${minecraft_version}-fabric:${jei_version}"); break
case "rei": modLocalRuntime("me.shedaniel:RoughlyEnoughItems-fabric:${rei_version}"); break
case "emi": modLocalRuntime("dev.emi:emi:${emi_version}"); break
case "disabled": break
default: println("Unknown recipe viewer specified: ${recipe_viewer}. Must be JEI, REI, EMI, or disabled.")
}
include(implementation(annotationProcessor("io.github.llamalad7:mixinextras-fabric:0.4.1")))
}
processResources {
// require dependencies to be the version compiled against or newer
Map<String, String> properties = new HashMap<>()
properties.put("version", version)
properties.put("fabric_loader_version", fabric_loader_version)
properties.put("fabric_api_version", fabric_api_version)
properties.put("create_version", create_version)
properties.put("minecraft_version", minecraft_version)
Map<String, Object> properties = [
"version": version,
"fabric_loader_version": libs.versions.fabric.loader.get(),
"fabric_api_version": libs.versions.fabric.api.get(),
"create_version": libs.versions.create.get(),
"minecraft_version": libs.versions.minecraft.get()
]
properties.forEach((k, v) -> inputs.property(k, v))
inputs.properties(properties)
filesMatching("fabric.mod.json") {
expand properties
@ -91,32 +91,18 @@ processResources {
tasks.withType(JavaCompile).configureEach {
it.options.encoding = "UTF-8"
it.options.release = Integer.parseInt(sourceCompatibility)
it.options.release = 17
}
java {
withSourcesJar()
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
// withSourcesJar()
}
jar {
from("LICENSE") {
rename { "${it}_${project.archivesBaseName}"}
}
}
// configure the maven publication
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
repositories {
// Add repositories to publish to here.
// Notice: This block does NOT have the same function as the block in the top level.
// The repositories here will be used for publishing your artifact, not for
// retrieving dependencies.
rename { "${it}_${base.archivesName.get()}"}
}
}

View File

@ -1,31 +1,9 @@
# Done to increase the memory available to gradle.
org.gradle.jvmargs = -Xmx1G
# Fabric Properties
# check these on https://modmuss50.me/fabric.html
minecraft_version=1.20.1
yarn_mappings=1.20.1+build.10
fabric_loader_version=0.14.24
# check this on https://modmuss50.me/fabric.html
fabric_api_version=0.90.0+1.20.1
# Mappings
# https://lambdaurora.dev/tools/import_quilt.html
qm_version = 23
# https://parchmentmc.org/docs/getting-started
parchment_version = 2023.06.26
# Mod Properties
mod_version = 1.0
maven_group = ru.bitheaven
archives_base_name = createairfabric
# Dependencies
# https://modrinth.com/mod/create-fabric/versions
create_version = 0.5.1-d-build.1161+mc1.20.1
# set to disabled to have none of them.
recipe_viewer = disabled
# Mod Menu - https://modrinth.com/mod/modmenu/versions
modmenu_version = 4.1.2
# LazyDFU - https://modrinth.com/mod/lazydfu/versions
lazydfu_version = 0.1.3
# Dependencies are managed at gradle/libs.versions.toml

46
gradle/libs.versions.toml Normal file
View File

@ -0,0 +1,46 @@
# The latest versions are available at https://quiltmc.org/en/usage/latest-versions
[versions]
minecraft = "1.20.1"
# https://lambdaurora.dev/tools/import_quilt.html
quilt_mappings = "1.20.1+build.23"
# https://parchmentmc.org/docs/getting-started
parchment = "2023.09.03"
fabric_loom = "1.8+"
# check these on https://modmuss50.me/fabric.html
fabric_loader = "0.16.9"
fabric_api = "0.92.2+1.20.1"
# https://modrinth.com/mod/create-fabric/versions
create = "0.5.1-j-build.1631+mc1.20.1"
# https://modrinth.com/mod/thin-air/versions
thinair = "v8.1.5-1.20.1-Fabric"
# https://modrinth.com/mod/ad-astra/versions
adastra = "Xtm1uo8F"
# https://modrinth.com/mod/botarium/versions
botarium = "f3ATcSfq"
# LazyDFU - https://modrinth.com/mod/lazydfu/versions
lazydfu = "0.1.3"
# Mod Menu - https://modrinth.com/mod/modmenu/versions
modmenu = "7.2.2"
[libraries]
minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" }
fabric_loader = { module = "net.fabricmc:fabric-loader", version.ref = "fabric_loader" }
fabric_api = { module = "net.fabricmc.fabric-api:fabric-api", version.ref = "fabric_api" }
create = { module = "com.simibubi.create:create-fabric-1.20.1", version.ref = "create" }
thinair = { module = "maven.modrinth:thin-air", version.ref = "thinair" }
adastra = { module = "maven.modrinth:ad-astra", version.ref = "adastra" }
botarium = { module = "maven.modrinth:botarium", version.ref = "botarium" }
lazydfu = { module = "maven.modrinth:lazydfu", version.ref = "lazydfu" }
modmenu = { module = "com.terraformersmc:modmenu", version.ref = "modmenu" }
# If you have multiple similar dependencies, you can declare a dependency bundle and reference it on the build script with "libs.bundles.example".
[bundles]
[plugins]
fabric_loom = { id = "fabric-loom", version.ref = "fabric_loom" }

View File

@ -1,6 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
networkTimeout=10000
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@ -4,6 +4,10 @@ pluginManagement {
name = 'Fabric'
url = 'https://maven.fabricmc.net/'
}
maven {
name = 'Quilt'
url = 'https://maven.quiltmc.org/repository/release'
}
gradlePluginPortal()
}
}

View File

@ -1,11 +1,10 @@
package ru.bitheaven.createairfabric;
import com.simibubi.create.Create;
import fuzs.thinair.helper.AirHelper;
import fuzs.thinair.helper.AirQualityLevel;
import io.github.fabricators_of_create.porting_lib.util.EnvExecutor;
import earth.terrarium.adastra.api.systems.OxygenApi;
import fuzs.thinair.helper.AirQualityHelperImpl;
import net.fabricmc.api.ModInitializer;
import net.minecraft.resources.ResourceLocation;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.world.entity.LivingEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -18,18 +17,17 @@ public class CreateAirFabric implements ModInitializer {
@Override
public void onInitialize() {
LOGGER.info("Create addon mod [{}] is loading alongside Create [{}]!", NAME, Create.VERSION);
LOGGER.info(EnvExecutor.unsafeRunForDist(
() -> () -> "{} is accessing Porting Lib from the client!",
() -> () -> "{} is accessing Porting Lib from the server!"
), NAME);
}
public static boolean airQualityActivatesHelmet(LivingEntity entity) {
final var air = AirHelper.getO2LevelFromLocation(entity.getEyePosition(), entity.level()).getFirst();
return air == AirQualityLevel.RED || air == AirQualityLevel.YELLOW;
public static boolean isOxygen(LivingEntity entity) {
boolean oxygen = true;
if (FabricLoader.getInstance().isModLoaded("thinair")) {
oxygen &= new AirQualityHelperImpl()
.getAirQualityAtLocation(entity.level(), entity.getEyePosition()).canBreathe;
}
public static ResourceLocation id(String path) {
return new ResourceLocation(ID, path);
if (FabricLoader.getInstance().isModLoaded("ad_astra")) {
oxygen &= OxygenApi.API.hasOxygen(entity.level());
}
return oxygen;
}
}

View File

@ -0,0 +1,69 @@
package ru.bitheaven.createairfabric;
import com.google.common.collect.ImmutableMap;
import net.fabricmc.loader.api.FabricLoader;
import org.objectweb.asm.tree.ClassNode;
import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Supplier;
public class CreateAirFabricMixinPlugin implements IMixinConfigPlugin {
private static final Supplier<Boolean> TRUE = () -> true;
private static final Map<String, Supplier<Boolean>> CONDITIONS = ImmutableMap.of(
"ru.bitheaven.createairfabric.mixin.DivingHelmetItemMixin",
() -> FabricLoader.getInstance().isModLoaded("thinair")
|| FabricLoader.getInstance().isModLoaded("ad_astra"),
"ru.bitheaven.createairfabric.mixin.RemainingAirOverlayMixin",
() -> FabricLoader.getInstance().isModLoaded("thinair")
|| FabricLoader.getInstance().isModLoaded("ad_astra"),
"ru.bitheaven.createairfabric.mixin.EntityOxygenSystemMixin",
() -> FabricLoader.getInstance().isModLoaded("ad_astra"),
"ru.bitheaven.createairfabric.mixin.EntityTemperatureSystemMixin",
() -> FabricLoader.getInstance().isModLoaded("ad_astra")
);
@Override
public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
return CONDITIONS.getOrDefault(mixinClassName, TRUE).get();
}
// Boilerplate
@Override
public void onLoad(String mixinPackage) {
}
@Override
public String getRefMapperConfig() {
return null;
}
@Override
public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {
}
@Override
public List<String> getMixins() {
return null;
}
@Override
public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
}
@Override
public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
}
}

View File

@ -1,26 +1,25 @@
package ru.bitheaven.createairfabric.mixin;
import fuzs.thinair.helper.AirHelper;
import fuzs.thinair.helper.AirQualityLevel;
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.entity.LivingEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import ru.bitheaven.createairfabric.CreateAirFabric;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.simibubi.create.content.equipment.armor.DivingHelmetItem;
import net.minecraft.world.entity.LivingEntity;
import ru.bitheaven.createairfabric.CreateAirFabric;
@Mixin(DivingHelmetItem.class)
public abstract class DivingHelmetItemMixin {
/**
* Activate helmet "if in water or lava" -> "if in water or bad air or lava"
*/
@Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;isEyeInFluid(Lnet/minecraft/tags/TagKey;)Z"),
@ModifyExpressionValue(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;isEyeInFluid(Lnet/minecraft/tags/TagKey;)Z"),
method = "breatheUnderwater(Lnet/minecraft/world/entity/LivingEntity;)V")
private static boolean redirectBreatheUnderwater(LivingEntity entity, TagKey<Fluid> fluidTagKey) {
return entity.isEyeInFluid(fluidTagKey) || CreateAirFabric.airQualityActivatesHelmet(entity);
private static boolean redirectBreatheUnderwater(boolean original, LivingEntity entity) {
boolean oxygen = true;
oxygen &= !original;
oxygen &= !entity.isUnderWater();
oxygen &= CreateAirFabric.isOxygen(entity);
return !oxygen;
}
}

View File

@ -0,0 +1,40 @@
package ru.bitheaven.createairfabric.mixin;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.simibubi.create.content.equipment.armor.BacktankItem;
import com.simibubi.create.content.equipment.armor.BacktankUtil;
import com.simibubi.create.content.equipment.armor.DivingHelmetItem;
import earth.terrarium.adastra.common.systems.OxygenApiImpl;
import earth.terrarium.adastra.common.tags.ModItemTags;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@Mixin(OxygenApiImpl.class)
public abstract class EntityOxygenSystemMixin {
/**
* Make air exists if Create Air
*/
@ModifyExpressionValue(at = @At(value = "INVOKE", target = "Learth/terrarium/adastra/common/items/armor/SpaceSuitItem;hasOxygen(Lnet/minecraft/world/entity/Entity;)Z"),
method = "entityTick(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/entity/LivingEntity;)V")
private boolean redirectHasOxygen(boolean original, ServerLevel level, LivingEntity entity) {
boolean createOxygen = true;
createOxygen &= !DivingHelmetItem.getWornItem(entity).isEmpty();
createOxygen &= !BacktankUtil.getAllWithAir(entity).isEmpty();
return original || createOxygen;
}
@ModifyExpressionValue(at = @At(value = "INVOKE", target = "Learth/terrarium/adastra/common/items/armor/SpaceSuitItem;hasFullSet(Lnet/minecraft/world/entity/LivingEntity;)Z"),
method = "entityTick(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/entity/LivingEntity;)V")
private boolean redirectHasFullSet(boolean original, ServerLevel level, LivingEntity entity) {
boolean createArmor = true;
createArmor &= entity.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof DivingHelmetItem;
createArmor &= entity.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof BacktankItem;
createArmor &= entity.getItemBySlot(EquipmentSlot.LEGS).is(ModItemTags.SPACE_SUITS);
createArmor &= entity.getItemBySlot(EquipmentSlot.FEET).is(ModItemTags.SPACE_SUITS);
return original || createArmor;
}
}

View File

@ -0,0 +1,30 @@
package ru.bitheaven.createairfabric.mixin;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import earth.terrarium.adastra.common.items.armor.NetheriteSpaceSuitItem;
import earth.terrarium.adastra.common.tags.ModItemTags;
import earth.terrarium.adastra.common.systems.TemperatureApiImpl;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@Mixin(TemperatureApiImpl.class)
public abstract class EntityTemperatureSystemMixin {
@ModifyExpressionValue(at = @At(value = "INVOKE", target = "Learth/terrarium/adastra/api/events/AdAstraEvents$HotTemperatureTickEvent;fire(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/entity/LivingEntity;)Z"),
method = "entityTick(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/entity/LivingEntity;)V")
private boolean redirectTemperatureTick(boolean original, ServerLevel level, LivingEntity entity) {
boolean createNetherite = true;
createNetherite &= entity.getItemBySlot(EquipmentSlot.HEAD).getItem().isFireResistant();
createNetherite &= entity.getItemBySlot(EquipmentSlot.CHEST).getItem().isFireResistant();
createNetherite &= entity.getItemBySlot(EquipmentSlot.LEGS).is(ModItemTags.HEAT_RESISTANT_ARMOR)
|| entity.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof NetheriteSpaceSuitItem
|| entity.getItemBySlot(EquipmentSlot.LEGS).getItem().isFireResistant();
createNetherite &= entity.getItemBySlot(EquipmentSlot.FEET).is(ModItemTags.HEAT_RESISTANT_ARMOR)
|| entity.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof NetheriteSpaceSuitItem
|| entity.getItemBySlot(EquipmentSlot.FEET).getItem().isFireResistant();
return original && !createNetherite;
}
}

View File

@ -1,11 +1,8 @@
package ru.bitheaven.createairfabric.mixin;
import ru.bitheaven.createairfabric.CreateAirFabric;
import net.minecraft.client.Minecraft;
import net.minecraft.client.main.GameConfig;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;

View File

@ -0,0 +1,23 @@
package ru.bitheaven.createairfabric.mixin;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.simibubi.create.content.equipment.armor.RemainingAirOverlay;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import ru.bitheaven.createairfabric.CreateAirFabric;
@Mixin(RemainingAirOverlay.class)
public class RemainingAirOverlayMixin {
/**
* Activate UI "if in water or lava" -> "if in water or bad air or lava"
*/
@ModifyExpressionValue(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isEyeInFluid(Lnet/minecraft/tags/TagKey;)Z"),
method = "render(Lnet/minecraft/client/gui/GuiGraphics;II)V")
private static boolean redirectRender(boolean original) {
Minecraft mc = Minecraft.getInstance();
LocalPlayer player = mc.player;
return original || !CreateAirFabric.isOxygen(player);
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -3,11 +3,15 @@
"minVersion": "0.8",
"package": "ru.bitheaven.createairfabric.mixin",
"compatibilityLevel": "JAVA_17",
"plugin": "ru.bitheaven.createairfabric.CreateAirFabricMixinPlugin",
"mixins": [
"DivingHelmetItemMixin"
"DivingHelmetItemMixin",
"EntityOxygenSystemMixin",
"EntityTemperatureSystemMixin"
],
"client": [
"MinecraftMixin"
"MinecraftMixin",
"RemainingAirOverlayMixin"
],
"injectors": {
"defaultRequire": 1

View File

@ -3,7 +3,7 @@
"id": "createairfabric",
"version": "${version}",
"name": "Create Air Fabric",
"description": "Addon for compatibility Create and Thin Air",
"description": "Addon for Create that add compatibility with Thin Air, Ad Astra",
"authors": [
"BitHeaven"
],