This commit is contained in:
2024-05-23 19:28:15 +02:00
commit 20da0f14d1
11 changed files with 370 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
package systems.brn.justteleportalready;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.gamerule.v1.GameRuleFactory;
import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry;
import net.minecraft.world.GameRules;
public class Justteleportalready implements ModInitializer {
public static final GameRules.Key<GameRules.IntRule> Entity_Portal_Cooldown =
GameRuleRegistry.register("entityPortalCooldown", GameRules.Category.MOBS, GameRuleFactory.createIntRule(300));
public static final GameRules.Key<GameRules.IntRule> Enderpearl_Damage =
GameRuleRegistry.register("enderpearlDamage", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(5));
@Override
public void onInitialize() {
}
}

View File

@@ -0,0 +1,23 @@
package systems.brn.justteleportalready.mixin;
import net.minecraft.entity.Entity;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import static systems.brn.justteleportalready.Justteleportalready.Enderpearl_Damage;
@Mixin(net.minecraft.entity.projectile.thrown.EnderPearlEntity.class)
public class DontHurtMePearlMixin {
@Redirect(method = "onCollision(Lnet/minecraft/util/hit/HitResult;)V",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/entity/Entity;damage(Lnet/minecraft/entity/damage/DamageSource;F)Z"))
private boolean redirectDamage(Entity entity, DamageSource source, float amount) {
World world = entity.getWorld();
entity.damage(source, world.getGameRules().getInt(Enderpearl_Damage));
return false;
}
}

View File

@@ -0,0 +1,32 @@
package systems.brn.justteleportalready.mixin;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import static systems.brn.justteleportalready.Justteleportalready.Entity_Portal_Cooldown;
@Mixin(net.minecraft.entity.Entity.class)
public class JustTeleportAlreadyMixin {
@Shadow private World world;
@Inject(method = "getDefaultPortalCooldown",
at = @At(value = "RETURN"),
cancellable = true)
private void getDefaultPortalCooldown(CallbackInfoReturnable<Integer> cir) {
cir.setReturnValue(world.getGameRules().getInt(Entity_Portal_Cooldown));
}
@Shadow protected int portalCooldown;
@Inject(method = "tickPortalCooldown", at = @At(value = "RETURN"))
private void tickPortalCooldown(CallbackInfo ci) {
int maxCooldown = world.getGameRules().getInt(Entity_Portal_Cooldown);
if (portalCooldown > maxCooldown) {
portalCooldown = maxCooldown;
}
}
}