diff --git a/build.gradle b/build.gradle index 226b21f891..0be76a33f2 100644 --- a/build.gradle +++ b/build.gradle @@ -299,6 +299,7 @@ project(":tools"){ compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" + compile "org.reflections:reflections:0.9.11" compile arcModule("backends:backend-sdl") } diff --git a/core/assets/scripts/global.js b/core/assets/scripts/global.js new file mode 100755 index 0000000000..ccca49d2c0 --- /dev/null +++ b/core/assets/scripts/global.js @@ -0,0 +1,360 @@ +//Generated class. Do not modify. +const Core = Java.type('io.anuke.arc.Core') +const Draw = Java.type('io.anuke.arc.graphics.g2d.Draw') +const TextureAtlas = Java.type('io.anuke.arc.graphics.g2d.TextureAtlas') +const TextureRegion = Java.type('io.anuke.arc.graphics.g2d.TextureRegion') +const Vars = Java.type('io.anuke.mindustry.Vars') +const BlockIndexer = Java.type('io.anuke.mindustry.ai.BlockIndexer') +const Pathfinder = Java.type('io.anuke.mindustry.ai.Pathfinder') +const WaveSpawner = Java.type('io.anuke.mindustry.ai.WaveSpawner') +const Blocks = Java.type('io.anuke.mindustry.content.Blocks') +const Bullets = Java.type('io.anuke.mindustry.content.Bullets') +const Fx = Java.type('io.anuke.mindustry.content.Fx') +const Items = Java.type('io.anuke.mindustry.content.Items') +const Liquids = Java.type('io.anuke.mindustry.content.Liquids') +const Loadouts = Java.type('io.anuke.mindustry.content.Loadouts') +const Mechs = Java.type('io.anuke.mindustry.content.Mechs') +const StatusEffects = Java.type('io.anuke.mindustry.content.StatusEffects') +const TechTree = Java.type('io.anuke.mindustry.content.TechTree') +const TypeIDs = Java.type('io.anuke.mindustry.content.TypeIDs') +const UnitTypes = Java.type('io.anuke.mindustry.content.UnitTypes') +const Zones = Java.type('io.anuke.mindustry.content.Zones') +const ContentLoader = Java.type('io.anuke.mindustry.core.ContentLoader') +const Control = Java.type('io.anuke.mindustry.core.Control') +const FileTree = Java.type('io.anuke.mindustry.core.FileTree') +const GameState = Java.type('io.anuke.mindustry.core.GameState') +const Logic = Java.type('io.anuke.mindustry.core.Logic') +const Platform = Java.type('io.anuke.mindustry.core.Platform') +const Renderer = Java.type('io.anuke.mindustry.core.Renderer') +const UI = Java.type('io.anuke.mindustry.core.UI') +const Version = Java.type('io.anuke.mindustry.core.Version') +const World = Java.type('io.anuke.mindustry.core.World') +const Content = Java.type('io.anuke.mindustry.ctype.Content') +const ContentList = Java.type('io.anuke.mindustry.ctype.ContentList') +const MappableContent = Java.type('io.anuke.mindustry.ctype.MappableContent') +const UnlockableContent = Java.type('io.anuke.mindustry.ctype.UnlockableContent') +const DrawOperation = Java.type('io.anuke.mindustry.editor.DrawOperation') +const EditorTile = Java.type('io.anuke.mindustry.editor.EditorTile') +const EditorTool = Java.type('io.anuke.mindustry.editor.EditorTool') +const MapEditor = Java.type('io.anuke.mindustry.editor.MapEditor') +const MapRenderer = Java.type('io.anuke.mindustry.editor.MapRenderer') +const OperationStack = Java.type('io.anuke.mindustry.editor.OperationStack') +const Damage = Java.type('io.anuke.mindustry.entities.Damage') +const Effects = Java.type('io.anuke.mindustry.entities.Effects') +const Entities = Java.type('io.anuke.mindustry.entities.Entities') +const EntityCollisions = Java.type('io.anuke.mindustry.entities.EntityCollisions') +const EntityGroup = Java.type('io.anuke.mindustry.entities.EntityGroup') +const Predict = Java.type('io.anuke.mindustry.entities.Predict') +const TargetPriority = Java.type('io.anuke.mindustry.entities.TargetPriority') +const Units = Java.type('io.anuke.mindustry.entities.Units') +const ArtilleryBulletType = Java.type('io.anuke.mindustry.entities.bullet.ArtilleryBulletType') +const BasicBulletType = Java.type('io.anuke.mindustry.entities.bullet.BasicBulletType') +const BombBulletType = Java.type('io.anuke.mindustry.entities.bullet.BombBulletType') +const BulletType = Java.type('io.anuke.mindustry.entities.bullet.BulletType') +const FlakBulletType = Java.type('io.anuke.mindustry.entities.bullet.FlakBulletType') +const HealBulletType = Java.type('io.anuke.mindustry.entities.bullet.HealBulletType') +const LiquidBulletType = Java.type('io.anuke.mindustry.entities.bullet.LiquidBulletType') +const MassDriverBolt = Java.type('io.anuke.mindustry.entities.bullet.MassDriverBolt') +const MissileBulletType = Java.type('io.anuke.mindustry.entities.bullet.MissileBulletType') +const Decal = Java.type('io.anuke.mindustry.entities.effect.Decal') +const Fire = Java.type('io.anuke.mindustry.entities.effect.Fire') +const GroundEffectEntity = Java.type('io.anuke.mindustry.entities.effect.GroundEffectEntity') +const ItemTransfer = Java.type('io.anuke.mindustry.entities.effect.ItemTransfer') +const Lightning = Java.type('io.anuke.mindustry.entities.effect.Lightning') +const Puddle = Java.type('io.anuke.mindustry.entities.effect.Puddle') +const RubbleDecal = Java.type('io.anuke.mindustry.entities.effect.RubbleDecal') +const ScorchDecal = Java.type('io.anuke.mindustry.entities.effect.ScorchDecal') +const AbsorbTrait = Java.type('io.anuke.mindustry.entities.traits.AbsorbTrait') +const BelowLiquidTrait = Java.type('io.anuke.mindustry.entities.traits.BelowLiquidTrait') +const BuilderMinerTrait = Java.type('io.anuke.mindustry.entities.traits.BuilderMinerTrait') +const BuilderTrait = Java.type('io.anuke.mindustry.entities.traits.BuilderTrait') +const DamageTrait = Java.type('io.anuke.mindustry.entities.traits.DamageTrait') +const DrawTrait = Java.type('io.anuke.mindustry.entities.traits.DrawTrait') +const Entity = Java.type('io.anuke.mindustry.entities.traits.Entity') +const HealthTrait = Java.type('io.anuke.mindustry.entities.traits.HealthTrait') +const KillerTrait = Java.type('io.anuke.mindustry.entities.traits.KillerTrait') +const MinerTrait = Java.type('io.anuke.mindustry.entities.traits.MinerTrait') +const MoveTrait = Java.type('io.anuke.mindustry.entities.traits.MoveTrait') +const SaveTrait = Java.type('io.anuke.mindustry.entities.traits.SaveTrait') +const Saveable = Java.type('io.anuke.mindustry.entities.traits.Saveable') +const ScaleTrait = Java.type('io.anuke.mindustry.entities.traits.ScaleTrait') +const ShooterTrait = Java.type('io.anuke.mindustry.entities.traits.ShooterTrait') +const SolidTrait = Java.type('io.anuke.mindustry.entities.traits.SolidTrait') +const SpawnerTrait = Java.type('io.anuke.mindustry.entities.traits.SpawnerTrait') +const SyncTrait = Java.type('io.anuke.mindustry.entities.traits.SyncTrait') +const TargetTrait = Java.type('io.anuke.mindustry.entities.traits.TargetTrait') +const TeamTrait = Java.type('io.anuke.mindustry.entities.traits.TeamTrait') +const TimeTrait = Java.type('io.anuke.mindustry.entities.traits.TimeTrait') +const TypeTrait = Java.type('io.anuke.mindustry.entities.traits.TypeTrait') +const VelocityTrait = Java.type('io.anuke.mindustry.entities.traits.VelocityTrait') +const BaseEntity = Java.type('io.anuke.mindustry.entities.type.BaseEntity') +const BaseUnit = Java.type('io.anuke.mindustry.entities.type.BaseUnit') +const Bullet = Java.type('io.anuke.mindustry.entities.type.Bullet') +const DestructibleEntity = Java.type('io.anuke.mindustry.entities.type.DestructibleEntity') +const EffectEntity = Java.type('io.anuke.mindustry.entities.type.EffectEntity') +const Player = Java.type('io.anuke.mindustry.entities.type.Player') +const SolidEntity = Java.type('io.anuke.mindustry.entities.type.SolidEntity') +const TileEntity = Java.type('io.anuke.mindustry.entities.type.TileEntity') +const TimedEntity = Java.type('io.anuke.mindustry.entities.type.TimedEntity') +const Unit = Java.type('io.anuke.mindustry.entities.type.Unit') +const BaseDrone = Java.type('io.anuke.mindustry.entities.type.base.BaseDrone') +const BuilderDrone = Java.type('io.anuke.mindustry.entities.type.base.BuilderDrone') +const Crawler = Java.type('io.anuke.mindustry.entities.type.base.Crawler') +const Dagger = Java.type('io.anuke.mindustry.entities.type.base.Dagger') +const Draug = Java.type('io.anuke.mindustry.entities.type.base.Draug') +const Eruptor = Java.type('io.anuke.mindustry.entities.type.base.Eruptor') +const FlyingUnit = Java.type('io.anuke.mindustry.entities.type.base.FlyingUnit') +const Fortress = Java.type('io.anuke.mindustry.entities.type.base.Fortress') +const Ghoul = Java.type('io.anuke.mindustry.entities.type.base.Ghoul') +const GroundUnit = Java.type('io.anuke.mindustry.entities.type.base.GroundUnit') +const MinerDrone = Java.type('io.anuke.mindustry.entities.type.base.MinerDrone') +const Phantom = Java.type('io.anuke.mindustry.entities.type.base.Phantom') +const RepairDrone = Java.type('io.anuke.mindustry.entities.type.base.RepairDrone') +const Revenant = Java.type('io.anuke.mindustry.entities.type.base.Revenant') +const Spirit = Java.type('io.anuke.mindustry.entities.type.base.Spirit') +const Titan = Java.type('io.anuke.mindustry.entities.type.base.Titan') +const Wraith = Java.type('io.anuke.mindustry.entities.type.base.Wraith') +const StateMachine = Java.type('io.anuke.mindustry.entities.units.StateMachine') +const Statuses = Java.type('io.anuke.mindustry.entities.units.Statuses') +const UnitCommand = Java.type('io.anuke.mindustry.entities.units.UnitCommand') +const UnitDrops = Java.type('io.anuke.mindustry.entities.units.UnitDrops') +const UnitState = Java.type('io.anuke.mindustry.entities.units.UnitState') +const DefaultWaves = Java.type('io.anuke.mindustry.game.DefaultWaves') +const Difficulty = Java.type('io.anuke.mindustry.game.Difficulty') +const EventType = Java.type('io.anuke.mindustry.game.EventType') +const Gamemode = Java.type('io.anuke.mindustry.game.Gamemode') +const GlobalData = Java.type('io.anuke.mindustry.game.GlobalData') +const LoopControl = Java.type('io.anuke.mindustry.game.LoopControl') +const MusicControl = Java.type('io.anuke.mindustry.game.MusicControl') +const Objective = Java.type('io.anuke.mindustry.game.Objective') +const Objectives = Java.type('io.anuke.mindustry.game.Objectives') +const Rules = Java.type('io.anuke.mindustry.game.Rules') +const Saves = Java.type('io.anuke.mindustry.game.Saves') +const Schematic = Java.type('io.anuke.mindustry.game.Schematic') +const Schematics = Java.type('io.anuke.mindustry.game.Schematics') +const SoundLoop = Java.type('io.anuke.mindustry.game.SoundLoop') +const SpawnGroup = Java.type('io.anuke.mindustry.game.SpawnGroup') +const Stats = Java.type('io.anuke.mindustry.game.Stats') +const Team = Java.type('io.anuke.mindustry.game.Team') +const Teams = Java.type('io.anuke.mindustry.game.Teams') +const Tutorial = Java.type('io.anuke.mindustry.game.Tutorial') +const BlockRenderer = Java.type('io.anuke.mindustry.graphics.BlockRenderer') +const Bloom = Java.type('io.anuke.mindustry.graphics.Bloom') +const CacheLayer = Java.type('io.anuke.mindustry.graphics.CacheLayer') +const Drawf = Java.type('io.anuke.mindustry.graphics.Drawf') +const FloorRenderer = Java.type('io.anuke.mindustry.graphics.FloorRenderer') +const IndexedRenderer = Java.type('io.anuke.mindustry.graphics.IndexedRenderer') +const Layer = Java.type('io.anuke.mindustry.graphics.Layer') +const LightRenderer = Java.type('io.anuke.mindustry.graphics.LightRenderer') +const MenuRenderer = Java.type('io.anuke.mindustry.graphics.MenuRenderer') +const MinimapRenderer = Java.type('io.anuke.mindustry.graphics.MinimapRenderer') +const MultiPacker = Java.type('io.anuke.mindustry.graphics.MultiPacker') +const OverlayRenderer = Java.type('io.anuke.mindustry.graphics.OverlayRenderer') +const Pal = Java.type('io.anuke.mindustry.graphics.Pal') +const Pixelator = Java.type('io.anuke.mindustry.graphics.Pixelator') +const Shaders = Java.type('io.anuke.mindustry.graphics.Shaders') +const Binding = Java.type('io.anuke.mindustry.input.Binding') +const DesktopInput = Java.type('io.anuke.mindustry.input.DesktopInput') +const InputHandler = Java.type('io.anuke.mindustry.input.InputHandler') +const MobileInput = Java.type('io.anuke.mindustry.input.MobileInput') +const PlaceMode = Java.type('io.anuke.mindustry.input.PlaceMode') +const Placement = Java.type('io.anuke.mindustry.input.Placement') +const Map = Java.type('io.anuke.mindustry.maps.Map') +const Maps = Java.type('io.anuke.mindustry.maps.Maps') +const BlendFilter = Java.type('io.anuke.mindustry.maps.filters.BlendFilter') +const ClearFilter = Java.type('io.anuke.mindustry.maps.filters.ClearFilter') +const DistortFilter = Java.type('io.anuke.mindustry.maps.filters.DistortFilter') +const FilterOption = Java.type('io.anuke.mindustry.maps.filters.FilterOption') +const GenerateFilter = Java.type('io.anuke.mindustry.maps.filters.GenerateFilter') +const MedianFilter = Java.type('io.anuke.mindustry.maps.filters.MedianFilter') +const MirrorFilter = Java.type('io.anuke.mindustry.maps.filters.MirrorFilter') +const NoiseFilter = Java.type('io.anuke.mindustry.maps.filters.NoiseFilter') +const OreFilter = Java.type('io.anuke.mindustry.maps.filters.OreFilter') +const OreMedianFilter = Java.type('io.anuke.mindustry.maps.filters.OreMedianFilter') +const RiverNoiseFilter = Java.type('io.anuke.mindustry.maps.filters.RiverNoiseFilter') +const ScatterFilter = Java.type('io.anuke.mindustry.maps.filters.ScatterFilter') +const TerrainFilter = Java.type('io.anuke.mindustry.maps.filters.TerrainFilter') +const BasicGenerator = Java.type('io.anuke.mindustry.maps.generators.BasicGenerator') +const Generator = Java.type('io.anuke.mindustry.maps.generators.Generator') +const MapGenerator = Java.type('io.anuke.mindustry.maps.generators.MapGenerator') +const RandomGenerator = Java.type('io.anuke.mindustry.maps.generators.RandomGenerator') +const DesertWastesGenerator = Java.type('io.anuke.mindustry.maps.zonegen.DesertWastesGenerator') +const OvergrowthGenerator = Java.type('io.anuke.mindustry.maps.zonegen.OvergrowthGenerator') +const Category = Java.type('io.anuke.mindustry.type.Category') +const ContentType = Java.type('io.anuke.mindustry.type.ContentType') +const Item = Java.type('io.anuke.mindustry.type.Item') +const ItemStack = Java.type('io.anuke.mindustry.type.ItemStack') +const ItemType = Java.type('io.anuke.mindustry.type.ItemType') +const Liquid = Java.type('io.anuke.mindustry.type.Liquid') +const LiquidStack = Java.type('io.anuke.mindustry.type.LiquidStack') +const Mech = Java.type('io.anuke.mindustry.type.Mech') +const Publishable = Java.type('io.anuke.mindustry.type.Publishable') +const StatusEffect = Java.type('io.anuke.mindustry.type.StatusEffect') +const TypeID = Java.type('io.anuke.mindustry.type.TypeID') +const UnitType = Java.type('io.anuke.mindustry.type.UnitType') +const Weapon = Java.type('io.anuke.mindustry.type.Weapon') +const WeatherEvent = Java.type('io.anuke.mindustry.type.WeatherEvent') +const Zone = Java.type('io.anuke.mindustry.type.Zone') +const Cicon = Java.type('io.anuke.mindustry.ui.Cicon') +const ContentDisplay = Java.type('io.anuke.mindustry.ui.ContentDisplay') +const Fonts = Java.type('io.anuke.mindustry.ui.Fonts') +const IconSize = Java.type('io.anuke.mindustry.ui.IconSize') +const IntFormat = Java.type('io.anuke.mindustry.ui.IntFormat') +const Links = Java.type('io.anuke.mindustry.ui.Links') +const Styles = Java.type('io.anuke.mindustry.ui.Styles') +const BlockConfigFragment = Java.type('io.anuke.mindustry.ui.fragments.BlockConfigFragment') +const BlockInventoryFragment = Java.type('io.anuke.mindustry.ui.fragments.BlockInventoryFragment') +const FadeInFragment = Java.type('io.anuke.mindustry.ui.fragments.FadeInFragment') +const Fragment = Java.type('io.anuke.mindustry.ui.fragments.Fragment') +const HudFragment = Java.type('io.anuke.mindustry.ui.fragments.HudFragment') +const LoadingFragment = Java.type('io.anuke.mindustry.ui.fragments.LoadingFragment') +const MenuFragment = Java.type('io.anuke.mindustry.ui.fragments.MenuFragment') +const OverlayFragment = Java.type('io.anuke.mindustry.ui.fragments.OverlayFragment') +const PlacementFragment = Java.type('io.anuke.mindustry.ui.fragments.PlacementFragment') +const PlayerListFragment = Java.type('io.anuke.mindustry.ui.fragments.PlayerListFragment') +const BranchTreeLayout = Java.type('io.anuke.mindustry.ui.layout.BranchTreeLayout') +const RadialTreeLayout = Java.type('io.anuke.mindustry.ui.layout.RadialTreeLayout') +const TreeLayout = Java.type('io.anuke.mindustry.ui.layout.TreeLayout') +const Block = Java.type('io.anuke.mindustry.world.Block') +const BlockStorage = Java.type('io.anuke.mindustry.world.BlockStorage') +const Build = Java.type('io.anuke.mindustry.world.Build') +const CachedTile = Java.type('io.anuke.mindustry.world.CachedTile') +const DirectionalItemBuffer = Java.type('io.anuke.mindustry.world.DirectionalItemBuffer') +const Edges = Java.type('io.anuke.mindustry.world.Edges') +const ItemBuffer = Java.type('io.anuke.mindustry.world.ItemBuffer') +const LegacyColorMapper = Java.type('io.anuke.mindustry.world.LegacyColorMapper') +const Pos = Java.type('io.anuke.mindustry.world.Pos') +const StaticTree = Java.type('io.anuke.mindustry.world.StaticTree') +const Tile = Java.type('io.anuke.mindustry.world.Tile') +const WorldContext = Java.type('io.anuke.mindustry.world.WorldContext') +const Attributes = Java.type('io.anuke.mindustry.world.blocks.Attributes') +const Autotiler = Java.type('io.anuke.mindustry.world.blocks.Autotiler') +const BlockPart = Java.type('io.anuke.mindustry.world.blocks.BlockPart') +const BuildBlock = Java.type('io.anuke.mindustry.world.blocks.BuildBlock') +const DoubleOverlayFloor = Java.type('io.anuke.mindustry.world.blocks.DoubleOverlayFloor') +const Floor = Java.type('io.anuke.mindustry.world.blocks.Floor') +const ItemSelection = Java.type('io.anuke.mindustry.world.blocks.ItemSelection') +const LiquidBlock = Java.type('io.anuke.mindustry.world.blocks.LiquidBlock') +const OreBlock = Java.type('io.anuke.mindustry.world.blocks.OreBlock') +const OverlayFloor = Java.type('io.anuke.mindustry.world.blocks.OverlayFloor') +const PowerBlock = Java.type('io.anuke.mindustry.world.blocks.PowerBlock') +const RespawnBlock = Java.type('io.anuke.mindustry.world.blocks.RespawnBlock') +const Rock = Java.type('io.anuke.mindustry.world.blocks.Rock') +const StaticWall = Java.type('io.anuke.mindustry.world.blocks.StaticWall') +const TreeBlock = Java.type('io.anuke.mindustry.world.blocks.TreeBlock') +const DeflectorWall = Java.type('io.anuke.mindustry.world.blocks.defense.DeflectorWall') +const Door = Java.type('io.anuke.mindustry.world.blocks.defense.Door') +const ForceProjector = Java.type('io.anuke.mindustry.world.blocks.defense.ForceProjector') +const MendProjector = Java.type('io.anuke.mindustry.world.blocks.defense.MendProjector') +const OverdriveProjector = Java.type('io.anuke.mindustry.world.blocks.defense.OverdriveProjector') +const ShockMine = Java.type('io.anuke.mindustry.world.blocks.defense.ShockMine') +const SurgeWall = Java.type('io.anuke.mindustry.world.blocks.defense.SurgeWall') +const Wall = Java.type('io.anuke.mindustry.world.blocks.defense.Wall') +const ArtilleryTurret = Java.type('io.anuke.mindustry.world.blocks.defense.turrets.ArtilleryTurret') +const BurstTurret = Java.type('io.anuke.mindustry.world.blocks.defense.turrets.BurstTurret') +const ChargeTurret = Java.type('io.anuke.mindustry.world.blocks.defense.turrets.ChargeTurret') +const CooledTurret = Java.type('io.anuke.mindustry.world.blocks.defense.turrets.CooledTurret') +const DoubleTurret = Java.type('io.anuke.mindustry.world.blocks.defense.turrets.DoubleTurret') +const ItemTurret = Java.type('io.anuke.mindustry.world.blocks.defense.turrets.ItemTurret') +const LaserTurret = Java.type('io.anuke.mindustry.world.blocks.defense.turrets.LaserTurret') +const LiquidTurret = Java.type('io.anuke.mindustry.world.blocks.defense.turrets.LiquidTurret') +const PowerTurret = Java.type('io.anuke.mindustry.world.blocks.defense.turrets.PowerTurret') +const Turret = Java.type('io.anuke.mindustry.world.blocks.defense.turrets.Turret') +const ArmoredConveyor = Java.type('io.anuke.mindustry.world.blocks.distribution.ArmoredConveyor') +const BufferedItemBridge = Java.type('io.anuke.mindustry.world.blocks.distribution.BufferedItemBridge') +const Conveyor = Java.type('io.anuke.mindustry.world.blocks.distribution.Conveyor') +const ExtendingItemBridge = Java.type('io.anuke.mindustry.world.blocks.distribution.ExtendingItemBridge') +const ItemBridge = Java.type('io.anuke.mindustry.world.blocks.distribution.ItemBridge') +const Junction = Java.type('io.anuke.mindustry.world.blocks.distribution.Junction') +const MassDriver = Java.type('io.anuke.mindustry.world.blocks.distribution.MassDriver') +const OverflowGate = Java.type('io.anuke.mindustry.world.blocks.distribution.OverflowGate') +const Router = Java.type('io.anuke.mindustry.world.blocks.distribution.Router') +const Sorter = Java.type('io.anuke.mindustry.world.blocks.distribution.Sorter') +const ArmoredConduit = Java.type('io.anuke.mindustry.world.blocks.liquid.ArmoredConduit') +const Conduit = Java.type('io.anuke.mindustry.world.blocks.liquid.Conduit') +const LiquidBridge = Java.type('io.anuke.mindustry.world.blocks.liquid.LiquidBridge') +const LiquidExtendingBridge = Java.type('io.anuke.mindustry.world.blocks.liquid.LiquidExtendingBridge') +const LiquidJunction = Java.type('io.anuke.mindustry.world.blocks.liquid.LiquidJunction') +const LiquidOverflowGate = Java.type('io.anuke.mindustry.world.blocks.liquid.LiquidOverflowGate') +const LiquidRouter = Java.type('io.anuke.mindustry.world.blocks.liquid.LiquidRouter') +const LiquidTank = Java.type('io.anuke.mindustry.world.blocks.liquid.LiquidTank') +const LogicBlock = Java.type('io.anuke.mindustry.world.blocks.logic.LogicBlock') +const MessageBlock = Java.type('io.anuke.mindustry.world.blocks.logic.MessageBlock') +const Battery = Java.type('io.anuke.mindustry.world.blocks.power.Battery') +const BurnerGenerator = Java.type('io.anuke.mindustry.world.blocks.power.BurnerGenerator') +const ConditionalConsumePower = Java.type('io.anuke.mindustry.world.blocks.power.ConditionalConsumePower') +const DecayGenerator = Java.type('io.anuke.mindustry.world.blocks.power.DecayGenerator') +const ImpactReactor = Java.type('io.anuke.mindustry.world.blocks.power.ImpactReactor') +const ItemLiquidGenerator = Java.type('io.anuke.mindustry.world.blocks.power.ItemLiquidGenerator') +const LightBlock = Java.type('io.anuke.mindustry.world.blocks.power.LightBlock') +const NuclearReactor = Java.type('io.anuke.mindustry.world.blocks.power.NuclearReactor') +const PowerDiode = Java.type('io.anuke.mindustry.world.blocks.power.PowerDiode') +const PowerDistributor = Java.type('io.anuke.mindustry.world.blocks.power.PowerDistributor') +const PowerGenerator = Java.type('io.anuke.mindustry.world.blocks.power.PowerGenerator') +const PowerGraph = Java.type('io.anuke.mindustry.world.blocks.power.PowerGraph') +const PowerNode = Java.type('io.anuke.mindustry.world.blocks.power.PowerNode') +const SingleTypeGenerator = Java.type('io.anuke.mindustry.world.blocks.power.SingleTypeGenerator') +const SolarGenerator = Java.type('io.anuke.mindustry.world.blocks.power.SolarGenerator') +const ThermalGenerator = Java.type('io.anuke.mindustry.world.blocks.power.ThermalGenerator') +const Cultivator = Java.type('io.anuke.mindustry.world.blocks.production.Cultivator') +const Drill = Java.type('io.anuke.mindustry.world.blocks.production.Drill') +const Fracker = Java.type('io.anuke.mindustry.world.blocks.production.Fracker') +const GenericCrafter = Java.type('io.anuke.mindustry.world.blocks.production.GenericCrafter') +const GenericSmelter = Java.type('io.anuke.mindustry.world.blocks.production.GenericSmelter') +const Incinerator = Java.type('io.anuke.mindustry.world.blocks.production.Incinerator') +const LiquidConverter = Java.type('io.anuke.mindustry.world.blocks.production.LiquidConverter') +const Pump = Java.type('io.anuke.mindustry.world.blocks.production.Pump') +const Separator = Java.type('io.anuke.mindustry.world.blocks.production.Separator') +const SolidPump = Java.type('io.anuke.mindustry.world.blocks.production.SolidPump') +const ItemSource = Java.type('io.anuke.mindustry.world.blocks.sandbox.ItemSource') +const ItemVoid = Java.type('io.anuke.mindustry.world.blocks.sandbox.ItemVoid') +const LiquidSource = Java.type('io.anuke.mindustry.world.blocks.sandbox.LiquidSource') +const PowerSource = Java.type('io.anuke.mindustry.world.blocks.sandbox.PowerSource') +const PowerVoid = Java.type('io.anuke.mindustry.world.blocks.sandbox.PowerVoid') +const CoreBlock = Java.type('io.anuke.mindustry.world.blocks.storage.CoreBlock') +const LaunchPad = Java.type('io.anuke.mindustry.world.blocks.storage.LaunchPad') +const StorageBlock = Java.type('io.anuke.mindustry.world.blocks.storage.StorageBlock') +const Unloader = Java.type('io.anuke.mindustry.world.blocks.storage.Unloader') +const Vault = Java.type('io.anuke.mindustry.world.blocks.storage.Vault') +const CommandCenter = Java.type('io.anuke.mindustry.world.blocks.units.CommandCenter') +const MechPad = Java.type('io.anuke.mindustry.world.blocks.units.MechPad') +const RallyPoint = Java.type('io.anuke.mindustry.world.blocks.units.RallyPoint') +const RepairPoint = Java.type('io.anuke.mindustry.world.blocks.units.RepairPoint') +const UnitFactory = Java.type('io.anuke.mindustry.world.blocks.units.UnitFactory') +const Consume = Java.type('io.anuke.mindustry.world.consumers.Consume') +const ConsumeItemFilter = Java.type('io.anuke.mindustry.world.consumers.ConsumeItemFilter') +const ConsumeItems = Java.type('io.anuke.mindustry.world.consumers.ConsumeItems') +const ConsumeLiquid = Java.type('io.anuke.mindustry.world.consumers.ConsumeLiquid') +const ConsumeLiquidBase = Java.type('io.anuke.mindustry.world.consumers.ConsumeLiquidBase') +const ConsumeLiquidFilter = Java.type('io.anuke.mindustry.world.consumers.ConsumeLiquidFilter') +const ConsumePower = Java.type('io.anuke.mindustry.world.consumers.ConsumePower') +const ConsumeType = Java.type('io.anuke.mindustry.world.consumers.ConsumeType') +const Consumers = Java.type('io.anuke.mindustry.world.consumers.Consumers') +const Attribute = Java.type('io.anuke.mindustry.world.meta.Attribute') +const BlockBars = Java.type('io.anuke.mindustry.world.meta.BlockBars') +const BlockFlag = Java.type('io.anuke.mindustry.world.meta.BlockFlag') +const BlockGroup = Java.type('io.anuke.mindustry.world.meta.BlockGroup') +const BlockStat = Java.type('io.anuke.mindustry.world.meta.BlockStat') +const BlockStats = Java.type('io.anuke.mindustry.world.meta.BlockStats') +const BuildVisibility = Java.type('io.anuke.mindustry.world.meta.BuildVisibility') +const PowerType = Java.type('io.anuke.mindustry.world.meta.PowerType') +const Producers = Java.type('io.anuke.mindustry.world.meta.Producers') +const StatCategory = Java.type('io.anuke.mindustry.world.meta.StatCategory') +const StatUnit = Java.type('io.anuke.mindustry.world.meta.StatUnit') +const StatValue = Java.type('io.anuke.mindustry.world.meta.StatValue') +const AmmoListValue = Java.type('io.anuke.mindustry.world.meta.values.AmmoListValue') +const BooleanValue = Java.type('io.anuke.mindustry.world.meta.values.BooleanValue') +const BoosterListValue = Java.type('io.anuke.mindustry.world.meta.values.BoosterListValue') +const ItemFilterValue = Java.type('io.anuke.mindustry.world.meta.values.ItemFilterValue') +const ItemListValue = Java.type('io.anuke.mindustry.world.meta.values.ItemListValue') +const LiquidFilterValue = Java.type('io.anuke.mindustry.world.meta.values.LiquidFilterValue') +const LiquidValue = Java.type('io.anuke.mindustry.world.meta.values.LiquidValue') +const NumberValue = Java.type('io.anuke.mindustry.world.meta.values.NumberValue') +const StringValue = Java.type('io.anuke.mindustry.world.meta.values.StringValue') +const BlockModule = Java.type('io.anuke.mindustry.world.modules.BlockModule') +const ConsumeModule = Java.type('io.anuke.mindustry.world.modules.ConsumeModule') +const ItemModule = Java.type('io.anuke.mindustry.world.modules.ItemModule') +const LiquidModule = Java.type('io.anuke.mindustry.world.modules.LiquidModule') +const PowerModule = Java.type('io.anuke.mindustry.world.modules.PowerModule') +const Produce = Java.type('io.anuke.mindustry.world.producers.Produce') +const ProduceItem = Java.type('io.anuke.mindustry.world.producers.ProduceItem') diff --git a/core/assets/scripts/wrapper.js b/core/assets/scripts/wrapper.js new file mode 100755 index 0000000000..24bb6fcda7 --- /dev/null +++ b/core/assets/scripts/wrapper.js @@ -0,0 +1,9 @@ +this["$SCRIPT_NAME$"] = function(){ +$CODE$ +}; + +try{ + this["$SCRIPT_NAME$"](); +}catch(e){ + console.log(e) +} diff --git a/core/src/io/anuke/mindustry/input/PlaceMode.java b/core/src/io/anuke/mindustry/input/PlaceMode.java index 5ac66c5220..cb287caed6 100644 --- a/core/src/io/anuke/mindustry/input/PlaceMode.java +++ b/core/src/io/anuke/mindustry/input/PlaceMode.java @@ -1,5 +1,5 @@ package io.anuke.mindustry.input; -enum PlaceMode{ +public enum PlaceMode{ none, breaking, placing, schematicSelect } diff --git a/core/src/io/anuke/mindustry/mod/ClassAccess.java b/core/src/io/anuke/mindustry/mod/ClassAccess.java new file mode 100644 index 0000000000..29c895c646 --- /dev/null +++ b/core/src/io/anuke/mindustry/mod/ClassAccess.java @@ -0,0 +1,8 @@ +package io.anuke.mindustry.mod; + +import io.anuke.arc.collection.*; +//obviously autogenerated, do not touch +class ClassAccess{ + static final Array> allowedClasses = Array.with(io.anuke.arc.Core.class, io.anuke.arc.graphics.g2d.Draw.class, io.anuke.arc.graphics.g2d.TextureAtlas.class, io.anuke.arc.graphics.g2d.TextureRegion.class, io.anuke.mindustry.Vars.class, io.anuke.mindustry.ai.BlockIndexer.class, io.anuke.mindustry.ai.Pathfinder.class, io.anuke.mindustry.ai.WaveSpawner.class, io.anuke.mindustry.content.Blocks.class, io.anuke.mindustry.content.Bullets.class, io.anuke.mindustry.content.Fx.class, io.anuke.mindustry.content.Items.class, io.anuke.mindustry.content.Liquids.class, io.anuke.mindustry.content.Loadouts.class, io.anuke.mindustry.content.Mechs.class, io.anuke.mindustry.content.StatusEffects.class, io.anuke.mindustry.content.TechTree.class, io.anuke.mindustry.content.TypeIDs.class, io.anuke.mindustry.content.UnitTypes.class, io.anuke.mindustry.content.Zones.class, io.anuke.mindustry.core.ContentLoader.class, io.anuke.mindustry.core.Control.class, io.anuke.mindustry.core.FileTree.class, io.anuke.mindustry.core.GameState.class, io.anuke.mindustry.core.Logic.class, io.anuke.mindustry.core.Platform.class, io.anuke.mindustry.core.Renderer.class, io.anuke.mindustry.core.UI.class, io.anuke.mindustry.core.Version.class, io.anuke.mindustry.core.World.class, io.anuke.mindustry.ctype.Content.class, io.anuke.mindustry.ctype.ContentList.class, io.anuke.mindustry.ctype.MappableContent.class, io.anuke.mindustry.ctype.UnlockableContent.class, io.anuke.mindustry.editor.DrawOperation.class, io.anuke.mindustry.editor.EditorTile.class, io.anuke.mindustry.editor.EditorTool.class, io.anuke.mindustry.editor.MapEditor.class, io.anuke.mindustry.editor.MapRenderer.class, io.anuke.mindustry.editor.OperationStack.class, io.anuke.mindustry.entities.Damage.class, io.anuke.mindustry.entities.Effects.class, io.anuke.mindustry.entities.Entities.class, io.anuke.mindustry.entities.EntityCollisions.class, io.anuke.mindustry.entities.EntityGroup.class, io.anuke.mindustry.entities.Predict.class, io.anuke.mindustry.entities.TargetPriority.class, io.anuke.mindustry.entities.Units.class, io.anuke.mindustry.entities.bullet.ArtilleryBulletType.class, io.anuke.mindustry.entities.bullet.BasicBulletType.class, io.anuke.mindustry.entities.bullet.BombBulletType.class, io.anuke.mindustry.entities.bullet.BulletType.class, io.anuke.mindustry.entities.bullet.FlakBulletType.class, io.anuke.mindustry.entities.bullet.HealBulletType.class, io.anuke.mindustry.entities.bullet.LiquidBulletType.class, io.anuke.mindustry.entities.bullet.MassDriverBolt.class, io.anuke.mindustry.entities.bullet.MissileBulletType.class, io.anuke.mindustry.entities.effect.Decal.class, io.anuke.mindustry.entities.effect.Fire.class, io.anuke.mindustry.entities.effect.GroundEffectEntity.class, io.anuke.mindustry.entities.effect.ItemTransfer.class, io.anuke.mindustry.entities.effect.Lightning.class, io.anuke.mindustry.entities.effect.Puddle.class, io.anuke.mindustry.entities.effect.RubbleDecal.class, io.anuke.mindustry.entities.effect.ScorchDecal.class, io.anuke.mindustry.entities.traits.AbsorbTrait.class, io.anuke.mindustry.entities.traits.BelowLiquidTrait.class, io.anuke.mindustry.entities.traits.BuilderMinerTrait.class, io.anuke.mindustry.entities.traits.BuilderTrait.class, io.anuke.mindustry.entities.traits.DamageTrait.class, io.anuke.mindustry.entities.traits.DrawTrait.class, io.anuke.mindustry.entities.traits.Entity.class, io.anuke.mindustry.entities.traits.HealthTrait.class, io.anuke.mindustry.entities.traits.KillerTrait.class, io.anuke.mindustry.entities.traits.MinerTrait.class, io.anuke.mindustry.entities.traits.MoveTrait.class, io.anuke.mindustry.entities.traits.SaveTrait.class, io.anuke.mindustry.entities.traits.Saveable.class, io.anuke.mindustry.entities.traits.ScaleTrait.class, io.anuke.mindustry.entities.traits.ShooterTrait.class, io.anuke.mindustry.entities.traits.SolidTrait.class, io.anuke.mindustry.entities.traits.SpawnerTrait.class, io.anuke.mindustry.entities.traits.SyncTrait.class, io.anuke.mindustry.entities.traits.TargetTrait.class, io.anuke.mindustry.entities.traits.TeamTrait.class, io.anuke.mindustry.entities.traits.TimeTrait.class, io.anuke.mindustry.entities.traits.TypeTrait.class, io.anuke.mindustry.entities.traits.VelocityTrait.class, io.anuke.mindustry.entities.type.BaseEntity.class, io.anuke.mindustry.entities.type.BaseUnit.class, io.anuke.mindustry.entities.type.Bullet.class, io.anuke.mindustry.entities.type.DestructibleEntity.class, io.anuke.mindustry.entities.type.EffectEntity.class, io.anuke.mindustry.entities.type.Player.class, io.anuke.mindustry.entities.type.SolidEntity.class, io.anuke.mindustry.entities.type.TileEntity.class, io.anuke.mindustry.entities.type.TimedEntity.class, io.anuke.mindustry.entities.type.Unit.class, io.anuke.mindustry.entities.type.base.BaseDrone.class, io.anuke.mindustry.entities.type.base.BuilderDrone.class, io.anuke.mindustry.entities.type.base.Crawler.class, io.anuke.mindustry.entities.type.base.Dagger.class, io.anuke.mindustry.entities.type.base.Draug.class, io.anuke.mindustry.entities.type.base.Eruptor.class, io.anuke.mindustry.entities.type.base.FlyingUnit.class, io.anuke.mindustry.entities.type.base.Fortress.class, io.anuke.mindustry.entities.type.base.Ghoul.class, io.anuke.mindustry.entities.type.base.GroundUnit.class, io.anuke.mindustry.entities.type.base.MinerDrone.class, io.anuke.mindustry.entities.type.base.Phantom.class, io.anuke.mindustry.entities.type.base.RepairDrone.class, io.anuke.mindustry.entities.type.base.Revenant.class, io.anuke.mindustry.entities.type.base.Spirit.class, io.anuke.mindustry.entities.type.base.Titan.class, io.anuke.mindustry.entities.type.base.Wraith.class, io.anuke.mindustry.entities.units.StateMachine.class, io.anuke.mindustry.entities.units.Statuses.class, io.anuke.mindustry.entities.units.UnitCommand.class, io.anuke.mindustry.entities.units.UnitDrops.class, io.anuke.mindustry.entities.units.UnitState.class, io.anuke.mindustry.game.DefaultWaves.class, io.anuke.mindustry.game.Difficulty.class, io.anuke.mindustry.game.EventType.class, io.anuke.mindustry.game.Gamemode.class, io.anuke.mindustry.game.GlobalData.class, io.anuke.mindustry.game.LoopControl.class, io.anuke.mindustry.game.MusicControl.class, io.anuke.mindustry.game.Objective.class, io.anuke.mindustry.game.Objectives.class, io.anuke.mindustry.game.Rules.class, io.anuke.mindustry.game.Saves.class, io.anuke.mindustry.game.Schematic.class, io.anuke.mindustry.game.Schematics.class, io.anuke.mindustry.game.SoundLoop.class, io.anuke.mindustry.game.SpawnGroup.class, io.anuke.mindustry.game.Stats.class, io.anuke.mindustry.game.Team.class, io.anuke.mindustry.game.Teams.class, io.anuke.mindustry.game.Tutorial.class, io.anuke.mindustry.graphics.BlockRenderer.class, io.anuke.mindustry.graphics.Bloom.class, io.anuke.mindustry.graphics.CacheLayer.class, io.anuke.mindustry.graphics.Drawf.class, io.anuke.mindustry.graphics.FloorRenderer.class, io.anuke.mindustry.graphics.IndexedRenderer.class, io.anuke.mindustry.graphics.Layer.class, io.anuke.mindustry.graphics.LightRenderer.class, io.anuke.mindustry.graphics.MenuRenderer.class, io.anuke.mindustry.graphics.MinimapRenderer.class, io.anuke.mindustry.graphics.MultiPacker.class, io.anuke.mindustry.graphics.OverlayRenderer.class, io.anuke.mindustry.graphics.Pal.class, io.anuke.mindustry.graphics.Pixelator.class, io.anuke.mindustry.graphics.Shaders.class, io.anuke.mindustry.input.Binding.class, io.anuke.mindustry.input.DesktopInput.class, io.anuke.mindustry.input.InputHandler.class, io.anuke.mindustry.input.MobileInput.class, io.anuke.mindustry.input.PlaceMode.class, io.anuke.mindustry.input.Placement.class, io.anuke.mindustry.maps.Map.class, io.anuke.mindustry.maps.Maps.class, io.anuke.mindustry.maps.filters.BlendFilter.class, io.anuke.mindustry.maps.filters.ClearFilter.class, io.anuke.mindustry.maps.filters.DistortFilter.class, io.anuke.mindustry.maps.filters.FilterOption.class, io.anuke.mindustry.maps.filters.GenerateFilter.class, io.anuke.mindustry.maps.filters.MedianFilter.class, io.anuke.mindustry.maps.filters.MirrorFilter.class, io.anuke.mindustry.maps.filters.NoiseFilter.class, io.anuke.mindustry.maps.filters.OreFilter.class, io.anuke.mindustry.maps.filters.OreMedianFilter.class, io.anuke.mindustry.maps.filters.RiverNoiseFilter.class, io.anuke.mindustry.maps.filters.ScatterFilter.class, io.anuke.mindustry.maps.filters.TerrainFilter.class, io.anuke.mindustry.maps.generators.BasicGenerator.class, io.anuke.mindustry.maps.generators.Generator.class, io.anuke.mindustry.maps.generators.MapGenerator.class, io.anuke.mindustry.maps.generators.RandomGenerator.class, io.anuke.mindustry.maps.zonegen.DesertWastesGenerator.class, io.anuke.mindustry.maps.zonegen.OvergrowthGenerator.class, io.anuke.mindustry.type.Category.class, io.anuke.mindustry.type.ContentType.class, io.anuke.mindustry.type.Item.class, io.anuke.mindustry.type.ItemStack.class, io.anuke.mindustry.type.ItemType.class, io.anuke.mindustry.type.Liquid.class, io.anuke.mindustry.type.LiquidStack.class, io.anuke.mindustry.type.Mech.class, io.anuke.mindustry.type.Publishable.class, io.anuke.mindustry.type.StatusEffect.class, io.anuke.mindustry.type.TypeID.class, io.anuke.mindustry.type.UnitType.class, io.anuke.mindustry.type.Weapon.class, io.anuke.mindustry.type.WeatherEvent.class, io.anuke.mindustry.type.Zone.class, io.anuke.mindustry.ui.Cicon.class, io.anuke.mindustry.ui.ContentDisplay.class, io.anuke.mindustry.ui.Fonts.class, io.anuke.mindustry.ui.IconSize.class, io.anuke.mindustry.ui.IntFormat.class, io.anuke.mindustry.ui.Links.class, io.anuke.mindustry.ui.Styles.class, io.anuke.mindustry.ui.fragments.BlockConfigFragment.class, io.anuke.mindustry.ui.fragments.BlockInventoryFragment.class, io.anuke.mindustry.ui.fragments.FadeInFragment.class, io.anuke.mindustry.ui.fragments.Fragment.class, io.anuke.mindustry.ui.fragments.HudFragment.class, io.anuke.mindustry.ui.fragments.LoadingFragment.class, io.anuke.mindustry.ui.fragments.MenuFragment.class, io.anuke.mindustry.ui.fragments.OverlayFragment.class, io.anuke.mindustry.ui.fragments.PlacementFragment.class, io.anuke.mindustry.ui.fragments.PlayerListFragment.class, io.anuke.mindustry.ui.layout.BranchTreeLayout.class, io.anuke.mindustry.ui.layout.RadialTreeLayout.class, io.anuke.mindustry.ui.layout.TreeLayout.class, io.anuke.mindustry.world.Block.class, io.anuke.mindustry.world.BlockStorage.class, io.anuke.mindustry.world.Build.class, io.anuke.mindustry.world.CachedTile.class, io.anuke.mindustry.world.DirectionalItemBuffer.class, io.anuke.mindustry.world.Edges.class, io.anuke.mindustry.world.ItemBuffer.class, io.anuke.mindustry.world.LegacyColorMapper.class, io.anuke.mindustry.world.Pos.class, io.anuke.mindustry.world.StaticTree.class, io.anuke.mindustry.world.Tile.class, io.anuke.mindustry.world.WorldContext.class, io.anuke.mindustry.world.blocks.Attributes.class, io.anuke.mindustry.world.blocks.Autotiler.class, io.anuke.mindustry.world.blocks.BlockPart.class, io.anuke.mindustry.world.blocks.BuildBlock.class, io.anuke.mindustry.world.blocks.DoubleOverlayFloor.class, io.anuke.mindustry.world.blocks.Floor.class, io.anuke.mindustry.world.blocks.ItemSelection.class, io.anuke.mindustry.world.blocks.LiquidBlock.class, io.anuke.mindustry.world.blocks.OreBlock.class, io.anuke.mindustry.world.blocks.OverlayFloor.class, io.anuke.mindustry.world.blocks.PowerBlock.class, io.anuke.mindustry.world.blocks.RespawnBlock.class, io.anuke.mindustry.world.blocks.Rock.class, io.anuke.mindustry.world.blocks.StaticWall.class, io.anuke.mindustry.world.blocks.TreeBlock.class, io.anuke.mindustry.world.blocks.defense.DeflectorWall.class, io.anuke.mindustry.world.blocks.defense.Door.class, io.anuke.mindustry.world.blocks.defense.ForceProjector.class, io.anuke.mindustry.world.blocks.defense.MendProjector.class, io.anuke.mindustry.world.blocks.defense.OverdriveProjector.class, io.anuke.mindustry.world.blocks.defense.ShockMine.class, io.anuke.mindustry.world.blocks.defense.SurgeWall.class, io.anuke.mindustry.world.blocks.defense.Wall.class, io.anuke.mindustry.world.blocks.defense.turrets.ArtilleryTurret.class, io.anuke.mindustry.world.blocks.defense.turrets.BurstTurret.class, io.anuke.mindustry.world.blocks.defense.turrets.ChargeTurret.class, io.anuke.mindustry.world.blocks.defense.turrets.CooledTurret.class, io.anuke.mindustry.world.blocks.defense.turrets.DoubleTurret.class, io.anuke.mindustry.world.blocks.defense.turrets.ItemTurret.class, io.anuke.mindustry.world.blocks.defense.turrets.LaserTurret.class, io.anuke.mindustry.world.blocks.defense.turrets.LiquidTurret.class, io.anuke.mindustry.world.blocks.defense.turrets.PowerTurret.class, io.anuke.mindustry.world.blocks.defense.turrets.Turret.class, io.anuke.mindustry.world.blocks.distribution.ArmoredConveyor.class, io.anuke.mindustry.world.blocks.distribution.BufferedItemBridge.class, io.anuke.mindustry.world.blocks.distribution.Conveyor.class, io.anuke.mindustry.world.blocks.distribution.ExtendingItemBridge.class, io.anuke.mindustry.world.blocks.distribution.ItemBridge.class, io.anuke.mindustry.world.blocks.distribution.Junction.class, io.anuke.mindustry.world.blocks.distribution.MassDriver.class, io.anuke.mindustry.world.blocks.distribution.OverflowGate.class, io.anuke.mindustry.world.blocks.distribution.Router.class, io.anuke.mindustry.world.blocks.distribution.Sorter.class, io.anuke.mindustry.world.blocks.liquid.ArmoredConduit.class, io.anuke.mindustry.world.blocks.liquid.Conduit.class, io.anuke.mindustry.world.blocks.liquid.LiquidBridge.class, io.anuke.mindustry.world.blocks.liquid.LiquidExtendingBridge.class, io.anuke.mindustry.world.blocks.liquid.LiquidJunction.class, io.anuke.mindustry.world.blocks.liquid.LiquidOverflowGate.class, io.anuke.mindustry.world.blocks.liquid.LiquidRouter.class, io.anuke.mindustry.world.blocks.liquid.LiquidTank.class, io.anuke.mindustry.world.blocks.logic.LogicBlock.class, io.anuke.mindustry.world.blocks.logic.MessageBlock.class, io.anuke.mindustry.world.blocks.power.Battery.class, io.anuke.mindustry.world.blocks.power.BurnerGenerator.class, io.anuke.mindustry.world.blocks.power.ConditionalConsumePower.class, io.anuke.mindustry.world.blocks.power.DecayGenerator.class, io.anuke.mindustry.world.blocks.power.ImpactReactor.class, io.anuke.mindustry.world.blocks.power.ItemLiquidGenerator.class, io.anuke.mindustry.world.blocks.power.LightBlock.class, io.anuke.mindustry.world.blocks.power.NuclearReactor.class, io.anuke.mindustry.world.blocks.power.PowerDiode.class, io.anuke.mindustry.world.blocks.power.PowerDistributor.class, io.anuke.mindustry.world.blocks.power.PowerGenerator.class, io.anuke.mindustry.world.blocks.power.PowerGraph.class, io.anuke.mindustry.world.blocks.power.PowerNode.class, io.anuke.mindustry.world.blocks.power.SingleTypeGenerator.class, io.anuke.mindustry.world.blocks.power.SolarGenerator.class, io.anuke.mindustry.world.blocks.power.ThermalGenerator.class, io.anuke.mindustry.world.blocks.production.Cultivator.class, io.anuke.mindustry.world.blocks.production.Drill.class, io.anuke.mindustry.world.blocks.production.Fracker.class, io.anuke.mindustry.world.blocks.production.GenericCrafter.class, io.anuke.mindustry.world.blocks.production.GenericSmelter.class, io.anuke.mindustry.world.blocks.production.Incinerator.class, io.anuke.mindustry.world.blocks.production.LiquidConverter.class, io.anuke.mindustry.world.blocks.production.Pump.class, io.anuke.mindustry.world.blocks.production.Separator.class, io.anuke.mindustry.world.blocks.production.SolidPump.class, io.anuke.mindustry.world.blocks.sandbox.ItemSource.class, io.anuke.mindustry.world.blocks.sandbox.ItemVoid.class, io.anuke.mindustry.world.blocks.sandbox.LiquidSource.class, io.anuke.mindustry.world.blocks.sandbox.PowerSource.class, io.anuke.mindustry.world.blocks.sandbox.PowerVoid.class, io.anuke.mindustry.world.blocks.storage.CoreBlock.class, io.anuke.mindustry.world.blocks.storage.LaunchPad.class, io.anuke.mindustry.world.blocks.storage.StorageBlock.class, io.anuke.mindustry.world.blocks.storage.Unloader.class, io.anuke.mindustry.world.blocks.storage.Vault.class, io.anuke.mindustry.world.blocks.units.CommandCenter.class, io.anuke.mindustry.world.blocks.units.MechPad.class, io.anuke.mindustry.world.blocks.units.RallyPoint.class, io.anuke.mindustry.world.blocks.units.RepairPoint.class, io.anuke.mindustry.world.blocks.units.UnitFactory.class, io.anuke.mindustry.world.consumers.Consume.class, io.anuke.mindustry.world.consumers.ConsumeItemFilter.class, io.anuke.mindustry.world.consumers.ConsumeItems.class, io.anuke.mindustry.world.consumers.ConsumeLiquid.class, io.anuke.mindustry.world.consumers.ConsumeLiquidBase.class, io.anuke.mindustry.world.consumers.ConsumeLiquidFilter.class, io.anuke.mindustry.world.consumers.ConsumePower.class, io.anuke.mindustry.world.consumers.ConsumeType.class, io.anuke.mindustry.world.consumers.Consumers.class, io.anuke.mindustry.world.meta.Attribute.class, io.anuke.mindustry.world.meta.BlockBars.class, io.anuke.mindustry.world.meta.BlockFlag.class, io.anuke.mindustry.world.meta.BlockGroup.class, io.anuke.mindustry.world.meta.BlockStat.class, io.anuke.mindustry.world.meta.BlockStats.class, io.anuke.mindustry.world.meta.BuildVisibility.class, io.anuke.mindustry.world.meta.PowerType.class, io.anuke.mindustry.world.meta.Producers.class, io.anuke.mindustry.world.meta.StatCategory.class, io.anuke.mindustry.world.meta.StatUnit.class, io.anuke.mindustry.world.meta.StatValue.class, io.anuke.mindustry.world.meta.values.AmmoListValue.class, io.anuke.mindustry.world.meta.values.BooleanValue.class, io.anuke.mindustry.world.meta.values.BoosterListValue.class, io.anuke.mindustry.world.meta.values.ItemFilterValue.class, io.anuke.mindustry.world.meta.values.ItemListValue.class, io.anuke.mindustry.world.meta.values.LiquidFilterValue.class, io.anuke.mindustry.world.meta.values.LiquidValue.class, io.anuke.mindustry.world.meta.values.NumberValue.class, io.anuke.mindustry.world.meta.values.StringValue.class, io.anuke.mindustry.world.modules.BlockModule.class, io.anuke.mindustry.world.modules.ConsumeModule.class, io.anuke.mindustry.world.modules.ItemModule.class, io.anuke.mindustry.world.modules.LiquidModule.class, io.anuke.mindustry.world.modules.PowerModule.class, io.anuke.mindustry.world.producers.Produce.class, io.anuke.mindustry.world.producers.ProduceItem.class); + static final ObjectSet allowedClassNames = ObjectSet.with("io.anuke.arc.Core", "io.anuke.arc.graphics.g2d.Draw", "io.anuke.arc.graphics.g2d.TextureAtlas", "io.anuke.arc.graphics.g2d.TextureRegion", "io.anuke.mindustry.Vars", "io.anuke.mindustry.ai.BlockIndexer", "io.anuke.mindustry.ai.Pathfinder", "io.anuke.mindustry.ai.WaveSpawner", "io.anuke.mindustry.content.Blocks", "io.anuke.mindustry.content.Bullets", "io.anuke.mindustry.content.Fx", "io.anuke.mindustry.content.Items", "io.anuke.mindustry.content.Liquids", "io.anuke.mindustry.content.Loadouts", "io.anuke.mindustry.content.Mechs", "io.anuke.mindustry.content.StatusEffects", "io.anuke.mindustry.content.TechTree", "io.anuke.mindustry.content.TypeIDs", "io.anuke.mindustry.content.UnitTypes", "io.anuke.mindustry.content.Zones", "io.anuke.mindustry.core.ContentLoader", "io.anuke.mindustry.core.Control", "io.anuke.mindustry.core.FileTree", "io.anuke.mindustry.core.GameState", "io.anuke.mindustry.core.Logic", "io.anuke.mindustry.core.Platform", "io.anuke.mindustry.core.Renderer", "io.anuke.mindustry.core.UI", "io.anuke.mindustry.core.Version", "io.anuke.mindustry.core.World", "io.anuke.mindustry.ctype.Content", "io.anuke.mindustry.ctype.ContentList", "io.anuke.mindustry.ctype.MappableContent", "io.anuke.mindustry.ctype.UnlockableContent", "io.anuke.mindustry.editor.DrawOperation", "io.anuke.mindustry.editor.EditorTile", "io.anuke.mindustry.editor.EditorTool", "io.anuke.mindustry.editor.MapEditor", "io.anuke.mindustry.editor.MapRenderer", "io.anuke.mindustry.editor.OperationStack", "io.anuke.mindustry.entities.Damage", "io.anuke.mindustry.entities.Effects", "io.anuke.mindustry.entities.Entities", "io.anuke.mindustry.entities.EntityCollisions", "io.anuke.mindustry.entities.EntityGroup", "io.anuke.mindustry.entities.Predict", "io.anuke.mindustry.entities.TargetPriority", "io.anuke.mindustry.entities.Units", "io.anuke.mindustry.entities.bullet.ArtilleryBulletType", "io.anuke.mindustry.entities.bullet.BasicBulletType", "io.anuke.mindustry.entities.bullet.BombBulletType", "io.anuke.mindustry.entities.bullet.BulletType", "io.anuke.mindustry.entities.bullet.FlakBulletType", "io.anuke.mindustry.entities.bullet.HealBulletType", "io.anuke.mindustry.entities.bullet.LiquidBulletType", "io.anuke.mindustry.entities.bullet.MassDriverBolt", "io.anuke.mindustry.entities.bullet.MissileBulletType", "io.anuke.mindustry.entities.effect.Decal", "io.anuke.mindustry.entities.effect.Fire", "io.anuke.mindustry.entities.effect.GroundEffectEntity", "io.anuke.mindustry.entities.effect.ItemTransfer", "io.anuke.mindustry.entities.effect.Lightning", "io.anuke.mindustry.entities.effect.Puddle", "io.anuke.mindustry.entities.effect.RubbleDecal", "io.anuke.mindustry.entities.effect.ScorchDecal", "io.anuke.mindustry.entities.traits.AbsorbTrait", "io.anuke.mindustry.entities.traits.BelowLiquidTrait", "io.anuke.mindustry.entities.traits.BuilderMinerTrait", "io.anuke.mindustry.entities.traits.BuilderTrait", "io.anuke.mindustry.entities.traits.DamageTrait", "io.anuke.mindustry.entities.traits.DrawTrait", "io.anuke.mindustry.entities.traits.Entity", "io.anuke.mindustry.entities.traits.HealthTrait", "io.anuke.mindustry.entities.traits.KillerTrait", "io.anuke.mindustry.entities.traits.MinerTrait", "io.anuke.mindustry.entities.traits.MoveTrait", "io.anuke.mindustry.entities.traits.SaveTrait", "io.anuke.mindustry.entities.traits.Saveable", "io.anuke.mindustry.entities.traits.ScaleTrait", "io.anuke.mindustry.entities.traits.ShooterTrait", "io.anuke.mindustry.entities.traits.SolidTrait", "io.anuke.mindustry.entities.traits.SpawnerTrait", "io.anuke.mindustry.entities.traits.SyncTrait", "io.anuke.mindustry.entities.traits.TargetTrait", "io.anuke.mindustry.entities.traits.TeamTrait", "io.anuke.mindustry.entities.traits.TimeTrait", "io.anuke.mindustry.entities.traits.TypeTrait", "io.anuke.mindustry.entities.traits.VelocityTrait", "io.anuke.mindustry.entities.type.BaseEntity", "io.anuke.mindustry.entities.type.BaseUnit", "io.anuke.mindustry.entities.type.Bullet", "io.anuke.mindustry.entities.type.DestructibleEntity", "io.anuke.mindustry.entities.type.EffectEntity", "io.anuke.mindustry.entities.type.Player", "io.anuke.mindustry.entities.type.SolidEntity", "io.anuke.mindustry.entities.type.TileEntity", "io.anuke.mindustry.entities.type.TimedEntity", "io.anuke.mindustry.entities.type.Unit", "io.anuke.mindustry.entities.type.base.BaseDrone", "io.anuke.mindustry.entities.type.base.BuilderDrone", "io.anuke.mindustry.entities.type.base.Crawler", "io.anuke.mindustry.entities.type.base.Dagger", "io.anuke.mindustry.entities.type.base.Draug", "io.anuke.mindustry.entities.type.base.Eruptor", "io.anuke.mindustry.entities.type.base.FlyingUnit", "io.anuke.mindustry.entities.type.base.Fortress", "io.anuke.mindustry.entities.type.base.Ghoul", "io.anuke.mindustry.entities.type.base.GroundUnit", "io.anuke.mindustry.entities.type.base.MinerDrone", "io.anuke.mindustry.entities.type.base.Phantom", "io.anuke.mindustry.entities.type.base.RepairDrone", "io.anuke.mindustry.entities.type.base.Revenant", "io.anuke.mindustry.entities.type.base.Spirit", "io.anuke.mindustry.entities.type.base.Titan", "io.anuke.mindustry.entities.type.base.Wraith", "io.anuke.mindustry.entities.units.StateMachine", "io.anuke.mindustry.entities.units.Statuses", "io.anuke.mindustry.entities.units.UnitCommand", "io.anuke.mindustry.entities.units.UnitDrops", "io.anuke.mindustry.entities.units.UnitState", "io.anuke.mindustry.game.DefaultWaves", "io.anuke.mindustry.game.Difficulty", "io.anuke.mindustry.game.EventType", "io.anuke.mindustry.game.Gamemode", "io.anuke.mindustry.game.GlobalData", "io.anuke.mindustry.game.LoopControl", "io.anuke.mindustry.game.MusicControl", "io.anuke.mindustry.game.Objective", "io.anuke.mindustry.game.Objectives", "io.anuke.mindustry.game.Rules", "io.anuke.mindustry.game.Saves", "io.anuke.mindustry.game.Schematic", "io.anuke.mindustry.game.Schematics", "io.anuke.mindustry.game.SoundLoop", "io.anuke.mindustry.game.SpawnGroup", "io.anuke.mindustry.game.Stats", "io.anuke.mindustry.game.Team", "io.anuke.mindustry.game.Teams", "io.anuke.mindustry.game.Tutorial", "io.anuke.mindustry.graphics.BlockRenderer", "io.anuke.mindustry.graphics.Bloom", "io.anuke.mindustry.graphics.CacheLayer", "io.anuke.mindustry.graphics.Drawf", "io.anuke.mindustry.graphics.FloorRenderer", "io.anuke.mindustry.graphics.IndexedRenderer", "io.anuke.mindustry.graphics.Layer", "io.anuke.mindustry.graphics.LightRenderer", "io.anuke.mindustry.graphics.MenuRenderer", "io.anuke.mindustry.graphics.MinimapRenderer", "io.anuke.mindustry.graphics.MultiPacker", "io.anuke.mindustry.graphics.OverlayRenderer", "io.anuke.mindustry.graphics.Pal", "io.anuke.mindustry.graphics.Pixelator", "io.anuke.mindustry.graphics.Shaders", "io.anuke.mindustry.input.Binding", "io.anuke.mindustry.input.DesktopInput", "io.anuke.mindustry.input.InputHandler", "io.anuke.mindustry.input.MobileInput", "io.anuke.mindustry.input.PlaceMode", "io.anuke.mindustry.input.Placement", "io.anuke.mindustry.maps.Map", "io.anuke.mindustry.maps.Maps", "io.anuke.mindustry.maps.filters.BlendFilter", "io.anuke.mindustry.maps.filters.ClearFilter", "io.anuke.mindustry.maps.filters.DistortFilter", "io.anuke.mindustry.maps.filters.FilterOption", "io.anuke.mindustry.maps.filters.GenerateFilter", "io.anuke.mindustry.maps.filters.MedianFilter", "io.anuke.mindustry.maps.filters.MirrorFilter", "io.anuke.mindustry.maps.filters.NoiseFilter", "io.anuke.mindustry.maps.filters.OreFilter", "io.anuke.mindustry.maps.filters.OreMedianFilter", "io.anuke.mindustry.maps.filters.RiverNoiseFilter", "io.anuke.mindustry.maps.filters.ScatterFilter", "io.anuke.mindustry.maps.filters.TerrainFilter", "io.anuke.mindustry.maps.generators.BasicGenerator", "io.anuke.mindustry.maps.generators.Generator", "io.anuke.mindustry.maps.generators.MapGenerator", "io.anuke.mindustry.maps.generators.RandomGenerator", "io.anuke.mindustry.maps.zonegen.DesertWastesGenerator", "io.anuke.mindustry.maps.zonegen.OvergrowthGenerator", "io.anuke.mindustry.type.Category", "io.anuke.mindustry.type.ContentType", "io.anuke.mindustry.type.Item", "io.anuke.mindustry.type.ItemStack", "io.anuke.mindustry.type.ItemType", "io.anuke.mindustry.type.Liquid", "io.anuke.mindustry.type.LiquidStack", "io.anuke.mindustry.type.Mech", "io.anuke.mindustry.type.Publishable", "io.anuke.mindustry.type.StatusEffect", "io.anuke.mindustry.type.TypeID", "io.anuke.mindustry.type.UnitType", "io.anuke.mindustry.type.Weapon", "io.anuke.mindustry.type.WeatherEvent", "io.anuke.mindustry.type.Zone", "io.anuke.mindustry.ui.Cicon", "io.anuke.mindustry.ui.ContentDisplay", "io.anuke.mindustry.ui.Fonts", "io.anuke.mindustry.ui.IconSize", "io.anuke.mindustry.ui.IntFormat", "io.anuke.mindustry.ui.Links", "io.anuke.mindustry.ui.Styles", "io.anuke.mindustry.ui.fragments.BlockConfigFragment", "io.anuke.mindustry.ui.fragments.BlockInventoryFragment", "io.anuke.mindustry.ui.fragments.FadeInFragment", "io.anuke.mindustry.ui.fragments.Fragment", "io.anuke.mindustry.ui.fragments.HudFragment", "io.anuke.mindustry.ui.fragments.LoadingFragment", "io.anuke.mindustry.ui.fragments.MenuFragment", "io.anuke.mindustry.ui.fragments.OverlayFragment", "io.anuke.mindustry.ui.fragments.PlacementFragment", "io.anuke.mindustry.ui.fragments.PlayerListFragment", "io.anuke.mindustry.ui.layout.BranchTreeLayout", "io.anuke.mindustry.ui.layout.RadialTreeLayout", "io.anuke.mindustry.ui.layout.TreeLayout", "io.anuke.mindustry.world.Block", "io.anuke.mindustry.world.BlockStorage", "io.anuke.mindustry.world.Build", "io.anuke.mindustry.world.CachedTile", "io.anuke.mindustry.world.DirectionalItemBuffer", "io.anuke.mindustry.world.Edges", "io.anuke.mindustry.world.ItemBuffer", "io.anuke.mindustry.world.LegacyColorMapper", "io.anuke.mindustry.world.Pos", "io.anuke.mindustry.world.StaticTree", "io.anuke.mindustry.world.Tile", "io.anuke.mindustry.world.WorldContext", "io.anuke.mindustry.world.blocks.Attributes", "io.anuke.mindustry.world.blocks.Autotiler", "io.anuke.mindustry.world.blocks.BlockPart", "io.anuke.mindustry.world.blocks.BuildBlock", "io.anuke.mindustry.world.blocks.DoubleOverlayFloor", "io.anuke.mindustry.world.blocks.Floor", "io.anuke.mindustry.world.blocks.ItemSelection", "io.anuke.mindustry.world.blocks.LiquidBlock", "io.anuke.mindustry.world.blocks.OreBlock", "io.anuke.mindustry.world.blocks.OverlayFloor", "io.anuke.mindustry.world.blocks.PowerBlock", "io.anuke.mindustry.world.blocks.RespawnBlock", "io.anuke.mindustry.world.blocks.Rock", "io.anuke.mindustry.world.blocks.StaticWall", "io.anuke.mindustry.world.blocks.TreeBlock", "io.anuke.mindustry.world.blocks.defense.DeflectorWall", "io.anuke.mindustry.world.blocks.defense.Door", "io.anuke.mindustry.world.blocks.defense.ForceProjector", "io.anuke.mindustry.world.blocks.defense.MendProjector", "io.anuke.mindustry.world.blocks.defense.OverdriveProjector", "io.anuke.mindustry.world.blocks.defense.ShockMine", "io.anuke.mindustry.world.blocks.defense.SurgeWall", "io.anuke.mindustry.world.blocks.defense.Wall", "io.anuke.mindustry.world.blocks.defense.turrets.ArtilleryTurret", "io.anuke.mindustry.world.blocks.defense.turrets.BurstTurret", "io.anuke.mindustry.world.blocks.defense.turrets.ChargeTurret", "io.anuke.mindustry.world.blocks.defense.turrets.CooledTurret", "io.anuke.mindustry.world.blocks.defense.turrets.DoubleTurret", "io.anuke.mindustry.world.blocks.defense.turrets.ItemTurret", "io.anuke.mindustry.world.blocks.defense.turrets.LaserTurret", "io.anuke.mindustry.world.blocks.defense.turrets.LiquidTurret", "io.anuke.mindustry.world.blocks.defense.turrets.PowerTurret", "io.anuke.mindustry.world.blocks.defense.turrets.Turret", "io.anuke.mindustry.world.blocks.distribution.ArmoredConveyor", "io.anuke.mindustry.world.blocks.distribution.BufferedItemBridge", "io.anuke.mindustry.world.blocks.distribution.Conveyor", "io.anuke.mindustry.world.blocks.distribution.ExtendingItemBridge", "io.anuke.mindustry.world.blocks.distribution.ItemBridge", "io.anuke.mindustry.world.blocks.distribution.Junction", "io.anuke.mindustry.world.blocks.distribution.MassDriver", "io.anuke.mindustry.world.blocks.distribution.OverflowGate", "io.anuke.mindustry.world.blocks.distribution.Router", "io.anuke.mindustry.world.blocks.distribution.Sorter", "io.anuke.mindustry.world.blocks.liquid.ArmoredConduit", "io.anuke.mindustry.world.blocks.liquid.Conduit", "io.anuke.mindustry.world.blocks.liquid.LiquidBridge", "io.anuke.mindustry.world.blocks.liquid.LiquidExtendingBridge", "io.anuke.mindustry.world.blocks.liquid.LiquidJunction", "io.anuke.mindustry.world.blocks.liquid.LiquidOverflowGate", "io.anuke.mindustry.world.blocks.liquid.LiquidRouter", "io.anuke.mindustry.world.blocks.liquid.LiquidTank", "io.anuke.mindustry.world.blocks.logic.LogicBlock", "io.anuke.mindustry.world.blocks.logic.MessageBlock", "io.anuke.mindustry.world.blocks.power.Battery", "io.anuke.mindustry.world.blocks.power.BurnerGenerator", "io.anuke.mindustry.world.blocks.power.ConditionalConsumePower", "io.anuke.mindustry.world.blocks.power.DecayGenerator", "io.anuke.mindustry.world.blocks.power.ImpactReactor", "io.anuke.mindustry.world.blocks.power.ItemLiquidGenerator", "io.anuke.mindustry.world.blocks.power.LightBlock", "io.anuke.mindustry.world.blocks.power.NuclearReactor", "io.anuke.mindustry.world.blocks.power.PowerDiode", "io.anuke.mindustry.world.blocks.power.PowerDistributor", "io.anuke.mindustry.world.blocks.power.PowerGenerator", "io.anuke.mindustry.world.blocks.power.PowerGraph", "io.anuke.mindustry.world.blocks.power.PowerNode", "io.anuke.mindustry.world.blocks.power.SingleTypeGenerator", "io.anuke.mindustry.world.blocks.power.SolarGenerator", "io.anuke.mindustry.world.blocks.power.ThermalGenerator", "io.anuke.mindustry.world.blocks.production.Cultivator", "io.anuke.mindustry.world.blocks.production.Drill", "io.anuke.mindustry.world.blocks.production.Fracker", "io.anuke.mindustry.world.blocks.production.GenericCrafter", "io.anuke.mindustry.world.blocks.production.GenericSmelter", "io.anuke.mindustry.world.blocks.production.Incinerator", "io.anuke.mindustry.world.blocks.production.LiquidConverter", "io.anuke.mindustry.world.blocks.production.Pump", "io.anuke.mindustry.world.blocks.production.Separator", "io.anuke.mindustry.world.blocks.production.SolidPump", "io.anuke.mindustry.world.blocks.sandbox.ItemSource", "io.anuke.mindustry.world.blocks.sandbox.ItemVoid", "io.anuke.mindustry.world.blocks.sandbox.LiquidSource", "io.anuke.mindustry.world.blocks.sandbox.PowerSource", "io.anuke.mindustry.world.blocks.sandbox.PowerVoid", "io.anuke.mindustry.world.blocks.storage.CoreBlock", "io.anuke.mindustry.world.blocks.storage.LaunchPad", "io.anuke.mindustry.world.blocks.storage.StorageBlock", "io.anuke.mindustry.world.blocks.storage.Unloader", "io.anuke.mindustry.world.blocks.storage.Vault", "io.anuke.mindustry.world.blocks.units.CommandCenter", "io.anuke.mindustry.world.blocks.units.MechPad", "io.anuke.mindustry.world.blocks.units.RallyPoint", "io.anuke.mindustry.world.blocks.units.RepairPoint", "io.anuke.mindustry.world.blocks.units.UnitFactory", "io.anuke.mindustry.world.consumers.Consume", "io.anuke.mindustry.world.consumers.ConsumeItemFilter", "io.anuke.mindustry.world.consumers.ConsumeItems", "io.anuke.mindustry.world.consumers.ConsumeLiquid", "io.anuke.mindustry.world.consumers.ConsumeLiquidBase", "io.anuke.mindustry.world.consumers.ConsumeLiquidFilter", "io.anuke.mindustry.world.consumers.ConsumePower", "io.anuke.mindustry.world.consumers.ConsumeType", "io.anuke.mindustry.world.consumers.Consumers", "io.anuke.mindustry.world.meta.Attribute", "io.anuke.mindustry.world.meta.BlockBars", "io.anuke.mindustry.world.meta.BlockFlag", "io.anuke.mindustry.world.meta.BlockGroup", "io.anuke.mindustry.world.meta.BlockStat", "io.anuke.mindustry.world.meta.BlockStats", "io.anuke.mindustry.world.meta.BuildVisibility", "io.anuke.mindustry.world.meta.PowerType", "io.anuke.mindustry.world.meta.Producers", "io.anuke.mindustry.world.meta.StatCategory", "io.anuke.mindustry.world.meta.StatUnit", "io.anuke.mindustry.world.meta.StatValue", "io.anuke.mindustry.world.meta.values.AmmoListValue", "io.anuke.mindustry.world.meta.values.BooleanValue", "io.anuke.mindustry.world.meta.values.BoosterListValue", "io.anuke.mindustry.world.meta.values.ItemFilterValue", "io.anuke.mindustry.world.meta.values.ItemListValue", "io.anuke.mindustry.world.meta.values.LiquidFilterValue", "io.anuke.mindustry.world.meta.values.LiquidValue", "io.anuke.mindustry.world.meta.values.NumberValue", "io.anuke.mindustry.world.meta.values.StringValue", "io.anuke.mindustry.world.modules.BlockModule", "io.anuke.mindustry.world.modules.ConsumeModule", "io.anuke.mindustry.world.modules.ItemModule", "io.anuke.mindustry.world.modules.LiquidModule", "io.anuke.mindustry.world.modules.PowerModule", "io.anuke.mindustry.world.producers.Produce", "io.anuke.mindustry.world.producers.ProduceItem"); +} \ No newline at end of file diff --git a/core/src/io/anuke/mindustry/mod/Mods.java b/core/src/io/anuke/mindustry/mod/Mods.java index 0107e5072f..c73e1bbd5d 100644 --- a/core/src/io/anuke/mindustry/mod/Mods.java +++ b/core/src/io/anuke/mindustry/mod/Mods.java @@ -30,7 +30,7 @@ import static io.anuke.mindustry.Vars.*; public class Mods implements Loadable{ private Json json = new Json(); - private Scripts scripts = new Scripts(); + private Scripts scripts; private ContentParser parser = new ContentParser(); private ObjectMap> bundles = new ObjectMap<>(); private ObjectSet specialFolders = ObjectSet.with("bundles", "sprites"); @@ -373,7 +373,10 @@ public class Mods implements Loadable{ for(FileHandle file : mod.scripts){ try{ - scripts.run(file.readString()); + if(scripts == null){ + scripts = new Scripts(); + } + scripts.run(mod, file); }catch(Throwable e){ Core.app.post(() -> { Log.err("Error loading script {0} for mod {1}.", file.name(), mod.meta.name); diff --git a/core/src/io/anuke/mindustry/mod/Scripts.java b/core/src/io/anuke/mindustry/mod/Scripts.java index f55a52571d..de8b8a9564 100644 --- a/core/src/io/anuke/mindustry/mod/Scripts.java +++ b/core/src/io/anuke/mindustry/mod/Scripts.java @@ -1,18 +1,40 @@ package io.anuke.mindustry.mod; +import io.anuke.arc.*; import io.anuke.arc.files.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.mod.Mods.*; import org.graalvm.polyglot.*; public class Scripts{ - //TODO allowHostAccess(...) is obviously insecure - private Context context = Context.newBuilder("js").allowHostClassLookup(s -> s.startsWith("io.anuke.mindustry")) - .allowHostAccess(HostAccess.newBuilder().allowPublicAccess(true).denyAccess(FileHandle.class).build()).build(); + private final Context context; + private final String wrapper; public Scripts(){ - context.eval("js", "console.log(\"Initialized JS context.\")"); + Time.mark(); + Context.Builder builder = Context.newBuilder("js").allowHostClassLookup(ClassAccess.allowedClassNames::contains); + + HostAccess.Builder hb = HostAccess.newBuilder(); + for(Class c : ClassAccess.allowedClasses){ + hb.allowImplementations(c); + Structs.each(hb::allowAccess, c.getConstructors()); + Structs.each(hb::allowAccess, c.getFields()); + Structs.each(hb::allowAccess, c.getMethods()); + } + builder.allowHostAccess(hb.build()); + + context = builder.build(); + wrapper = Core.files.internal("scripts/wrapper.js").readString(); + + run(Core.files.internal("scripts/global.js").readString()); + Log.info("Time to load script engine: {0}", Time.elapsed()); } - public void run(String script){ + public void run(LoadedMod mod, FileHandle file){ + run(wrapper.replace("$SCRIPT_NAME$", mod.name + "_" +file.nameWithoutExtension().replace("-", "_").replace(" ", "_")).replace("$CODE$", file.readString())); + } + + private void run(String script){ context.eval("js", script); } } diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/Door.java b/core/src/io/anuke/mindustry/world/blocks/defense/Door.java index b0c83fba9d..dc05d1ee58 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/Door.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/Door.java @@ -18,11 +18,11 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class Door extends Wall{ - protected final Rectangle rect = new Rectangle(); + protected final static Rectangle rect = new Rectangle(); - protected int timerToggle = timers++; - protected Effect openfx = Fx.dooropen; - protected Effect closefx = Fx.doorclose; + public final int timerToggle = timers++; + public Effect openfx = Fx.dooropen; + public Effect closefx = Fx.doorclose; protected TextureRegion openRegion; diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/ForceProjector.java b/core/src/io/anuke/mindustry/world/blocks/defense/ForceProjector.java index 4dce2d9db9..5b385578d1 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/ForceProjector.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/ForceProjector.java @@ -21,17 +21,17 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class ForceProjector extends Block{ - protected int timerUse = timers++; - protected float phaseUseTime = 350f; + public final int timerUse = timers++; + public float phaseUseTime = 350f; - protected float phaseRadiusBoost = 80f; - protected float radius = 101.7f; - protected float breakage = 550f; - protected float cooldownNormal = 1.75f; - protected float cooldownLiquid = 1.5f; - protected float cooldownBrokenBase = 0.35f; - protected float basePowerDraw = 0.2f; - protected TextureRegion topRegion; + public float phaseRadiusBoost = 80f; + public float radius = 101.7f; + public float breakage = 550f; + public float cooldownNormal = 1.75f; + public float cooldownLiquid = 1.5f; + public float cooldownBrokenBase = 0.35f; + public float basePowerDraw = 0.2f; + public TextureRegion topRegion; private static Tile paramTile; private static ForceProjector paramBlock; diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/MendProjector.java b/core/src/io/anuke/mindustry/world/blocks/defense/MendProjector.java index 5ba2461265..1d737a4900 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/MendProjector.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/MendProjector.java @@ -18,19 +18,18 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class MendProjector extends Block{ - private static Color color = Color.valueOf("84f491"); - private static Color phase = Color.valueOf("ffd59e"); - private static IntSet healed = new IntSet(); + private static final IntSet healed = new IntSet(); - protected int timerUse = timers++; - - protected TextureRegion topRegion; - protected float reload = 250f; - protected float range = 60f; - protected float healPercent = 12f; - protected float phaseBoost = 12f; - protected float phaseRangeBoost = 50f; - protected float useTime = 400f; + public final int timerUse = timers++; + public Color baseColor = Color.valueOf("84f491"); + public Color phaseColor = Color.valueOf("ffd59e"); + public TextureRegion topRegion; + public float reload = 250f; + public float range = 60f; + public float healPercent = 12f; + public float phaseBoost = 12f; + public float phaseRangeBoost = 50f; + public float useTime = 400f; public MendProjector(String name){ super(name); @@ -92,7 +91,7 @@ public class MendProjector extends Block{ if(other.getTeamID() == tile.getTeamID() && !healed.contains(other.pos()) && other.entity != null && other.entity.health < other.entity.maxHealth()){ other.entity.healBy(other.entity.maxHealth() * (healPercent + entity.phaseHeat * phaseBoost) / 100f * entity.efficiency()); - Effects.effect(Fx.healBlockFull, Tmp.c1.set(color).lerp(phase, entity.phaseHeat), other.drawx(), other.drawy(), other.block().size); + Effects.effect(Fx.healBlockFull, Tmp.c1.set(baseColor).lerp(phaseColor, entity.phaseHeat), other.drawx(), other.drawy(), other.block().size); healed.add(other.pos()); } } @@ -110,7 +109,7 @@ public class MendProjector extends Block{ MendEntity entity = tile.entity(); float realRange = range + entity.phaseHeat * phaseRangeBoost; - Drawf.dashCircle(tile.drawx(), tile.drawy(), realRange, color); + Drawf.dashCircle(tile.drawx(), tile.drawy(), realRange, baseColor); } @Override @@ -120,7 +119,7 @@ public class MendProjector extends Block{ MendEntity entity = tile.entity(); float f = 1f - (Time.time() / 100f) % 1f; - Draw.color(color, phase, entity.phaseHeat); + Draw.color(baseColor, phaseColor, entity.phaseHeat); Draw.alpha(entity.heat * Mathf.absin(Time.time(), 10f, 1f) * 0.5f); //Draw.blend(Blending.additive); Draw.rect(topRegion, tile.drawx(), tile.drawy()); @@ -135,7 +134,7 @@ public class MendProjector extends Block{ @Override public void drawLight(Tile tile){ - renderer.lights.add(tile.drawx(), tile.drawy(), 50f * tile.entity.efficiency(), color, 0.7f * tile.entity.efficiency()); + renderer.lights.add(tile.drawx(), tile.drawy(), 50f * tile.entity.efficiency(), baseColor, 0.7f * tile.entity.efficiency()); } class MendEntity extends TileEntity{ diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java b/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java index cc8c99a54e..f1708354b5 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java @@ -16,19 +16,19 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class OverdriveProjector extends Block{ - private static Color color = Color.valueOf("feb380"); - private static Color phase = Color.valueOf("ffd59e"); - private static IntSet healed = new IntSet(); + private static final IntSet healed = new IntSet(); - protected int timerUse = timers++; + public final int timerUse = timers++; - protected TextureRegion topRegion; - protected float reload = 60f; - protected float range = 80f; - protected float speedBoost = 1.5f; - protected float speedBoostPhase = 0.75f; - protected float useTime = 400f; - protected float phaseRangeBoost = 20f; + public TextureRegion topRegion; + public float reload = 60f; + public float range = 80f; + public float speedBoost = 1.5f; + public float speedBoostPhase = 0.75f; + public float useTime = 400f; + public float phaseRangeBoost = 20f; + public Color baseColor = Color.valueOf("feb380"); + public Color phaseColor = Color.valueOf("ffd59e"); public OverdriveProjector(String name){ super(name); @@ -69,7 +69,7 @@ public class OverdriveProjector extends Block{ @Override public void drawLight(Tile tile){ - renderer.lights.add(tile.drawx(), tile.drawy(), 50f * tile.entity.efficiency(), color, 0.7f * tile.entity.efficiency()); + renderer.lights.add(tile.drawx(), tile.drawy(), 50f * tile.entity.efficiency(), baseColor, 0.7f * tile.entity.efficiency()); } @Override @@ -118,7 +118,7 @@ public class OverdriveProjector extends Block{ OverdriveEntity entity = tile.entity(); float realRange = range + entity.phaseHeat * phaseRangeBoost; - Drawf.dashCircle(tile.drawx(), tile.drawy(), realRange, color); + Drawf.dashCircle(tile.drawx(), tile.drawy(), realRange, baseColor); } @Override @@ -128,7 +128,7 @@ public class OverdriveProjector extends Block{ OverdriveEntity entity = tile.entity(); float f = 1f - (Time.time() / 100f) % 1f; - Draw.color(color, phase, entity.phaseHeat); + Draw.color(baseColor, phaseColor, entity.phaseHeat); Draw.alpha(entity.heat * Mathf.absin(Time.time(), 10f, 1f) * 0.5f); Draw.rect(topRegion, tile.drawx(), tile.drawy()); Draw.alpha(1f); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/ShockMine.java b/core/src/io/anuke/mindustry/world/blocks/defense/ShockMine.java index e834812f5a..de72043c7d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/ShockMine.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/ShockMine.java @@ -11,13 +11,13 @@ import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; public class ShockMine extends Block{ - protected int timerDamage = timers++; + public final int timerDamage = timers++; - protected float cooldown = 80f; - protected float tileDamage = 5f; - protected float damage = 13; - protected int length = 10; - protected int tendrils = 6; + public float cooldown = 80f; + public float tileDamage = 5f; + public float damage = 13; + public int length = 10; + public int tendrils = 6; public ShockMine(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/SurgeWall.java b/core/src/io/anuke/mindustry/world/blocks/defense/SurgeWall.java index 0f51c74b40..a1c52ac823 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/SurgeWall.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/SurgeWall.java @@ -7,9 +7,9 @@ import io.anuke.mindustry.entities.type.TileEntity; import io.anuke.mindustry.graphics.Pal; public class SurgeWall extends Wall{ - protected float lightningChance = 0.05f; - protected float lightningDamage = 15f; - protected int lightningLength = 17; + public float lightningChance = 0.05f; + public float lightningDamage = 15f; + public int lightningLength = 17; public SurgeWall(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/Wall.java b/core/src/io/anuke/mindustry/world/blocks/defense/Wall.java index 70d6b6f91f..8b60ffd0f2 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/Wall.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/Wall.java @@ -9,7 +9,7 @@ import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.meta.BlockGroup; public class Wall extends Block{ - protected int variants = 0; + public int variants = 0; public Wall(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ArtilleryTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ArtilleryTurret.java index 53ba8cbad4..f7095474c8 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ArtilleryTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ArtilleryTurret.java @@ -13,7 +13,7 @@ import static io.anuke.mindustry.Vars.tilesize; * Artillery turrets have special shooting calculations done to hit targets. */ public class ArtilleryTurret extends ItemTurret{ - protected float velocityInaccuracy = 0f; + public float velocityInaccuracy = 0f; public ArtilleryTurret(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/BurstTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/BurstTurret.java index d746227559..66775fb14e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/BurstTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/BurstTurret.java @@ -8,7 +8,7 @@ import io.anuke.mindustry.world.Tile; import static io.anuke.mindustry.Vars.tilesize; public class BurstTurret extends ItemTurret{ - protected float burstSpacing = 5; + public float burstSpacing = 5; public BurstTurret(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ChargeTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ChargeTurret.java index 3f02328eed..e6aac80ea9 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ChargeTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ChargeTurret.java @@ -12,11 +12,11 @@ import static io.anuke.mindustry.Vars.tilesize; public class ChargeTurret extends PowerTurret{ - protected float chargeTime = 30f; - protected int chargeEffects = 5; - protected float chargeMaxDelay = 10f; - protected Effect chargeEffect = Fx.none; - protected Effect chargeBeginEffect = Fx.none; + public float chargeTime = 30f; + public int chargeEffects = 5; + public float chargeMaxDelay = 10f; + public Effect chargeEffect = Fx.none; + public Effect chargeBeginEffect = Fx.none; public ChargeTurret(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/CooledTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/CooledTurret.java index 58038d857e..03c35de0d0 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/CooledTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/CooledTurret.java @@ -17,8 +17,8 @@ import static io.anuke.mindustry.Vars.tilesize; public class CooledTurret extends Turret{ /** How much reload is lowered by for each unit of liquid of heat capacity. */ - protected float coolantMultiplier = 5f; - protected Effect coolEffect = Fx.fuelburn; + public float coolantMultiplier = 5f; + public Effect coolEffect = Fx.fuelburn; public CooledTurret(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/DoubleTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/DoubleTurret.java index 2067bd285a..813280bb2f 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/DoubleTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/DoubleTurret.java @@ -9,7 +9,7 @@ import io.anuke.mindustry.world.meta.StatUnit; import static io.anuke.mindustry.Vars.tilesize; public class DoubleTurret extends ItemTurret{ - protected float shotWidth = 2f; + public float shotWidth = 2f; public DoubleTurret(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java index dca1324e66..ea670a37e5 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java @@ -22,8 +22,8 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class ItemTurret extends CooledTurret{ - protected int maxAmmo = 30; - protected ObjectMap ammo = new ObjectMap<>(); + public int maxAmmo = 30; + public ObjectMap ammo = new ObjectMap<>(); public ItemTurret(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LaserTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LaserTurret.java index 2766e79724..74e8490928 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LaserTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LaserTurret.java @@ -14,8 +14,8 @@ import io.anuke.mindustry.world.meta.values.*; import static io.anuke.mindustry.Vars.tilesize; public class LaserTurret extends PowerTurret{ - protected float firingMoveFract = 0.25f; - protected float shootDuration = 100f; + public float firingMoveFract = 0.25f; + public float shootDuration = 100f; public LaserTurret(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LiquidTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LiquidTurret.java index 28a33aa82a..83b9a75d8b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LiquidTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LiquidTurret.java @@ -15,7 +15,7 @@ import io.anuke.mindustry.world.meta.values.*; import static io.anuke.mindustry.Vars.*; public class LiquidTurret extends Turret{ - protected ObjectMap ammo = new ObjectMap<>(); + public ObjectMap ammo = new ObjectMap<>(); public LiquidTurret(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/PowerTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/PowerTurret.java index 7e4c54ace4..1eab2079a8 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/PowerTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/PowerTurret.java @@ -7,8 +7,8 @@ import io.anuke.mindustry.world.meta.BlockStat; import io.anuke.mindustry.world.meta.StatUnit; public class PowerTurret extends CooledTurret{ - protected @NonNull BulletType shootType; - protected float powerUse = 1f; + public @NonNull BulletType shootType; + public float powerUse = 1f; public PowerTurret(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/Turret.java index 05edbe5091..9f2cfa9ed6 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/Turret.java @@ -28,40 +28,39 @@ import io.anuke.mindustry.world.meta.*; import static io.anuke.mindustry.Vars.tilesize; public abstract class Turret extends Block{ - protected static final int targetInterval = 20; + public final int timerTarget = timers++; + public int targetInterval = 20; - protected final int timerTarget = timers++; + public Color heatColor = Pal.turretHeat; + public Effect shootEffect = Fx.none; + public Effect smokeEffect = Fx.none; + public Effect ammoUseEffect = Fx.none; + public Sound shootSound = Sounds.shoot; - protected Color heatColor = Pal.turretHeat; - protected Effect shootEffect = Fx.none; - protected Effect smokeEffect = Fx.none; - protected Effect ammoUseEffect = Fx.none; - protected Sound shootSound = Sounds.shoot; - - protected int ammoPerShot = 1; - protected float ammoEjectBack = 1f; - protected float range = 50f; - protected float reload = 10f; - protected float inaccuracy = 0f; - protected int shots = 1; - protected float spread = 4f; - protected float recoil = 1f; - protected float restitution = 0.02f; - protected float cooldown = 0.02f; - protected float rotatespeed = 5f; //in degrees per tick - protected float shootCone = 8f; - protected float shootShake = 0f; - protected float xRand = 0f; - protected boolean targetAir = true; - protected boolean targetGround = true; + public int ammoPerShot = 1; + public float ammoEjectBack = 1f; + public float range = 50f; + public float reload = 10f; + public float inaccuracy = 0f; + public int shots = 1; + public float spread = 4f; + public float recoil = 1f; + public float restitution = 0.02f; + public float cooldown = 0.02f; + public float rotatespeed = 5f; //in degrees per tick + public float shootCone = 8f; + public float shootShake = 0f; + public float xRand = 0f; + public boolean targetAir = true; + public boolean targetGround = true; protected Vector2 tr = new Vector2(); protected Vector2 tr2 = new Vector2(); - protected TextureRegion baseRegion, heatRegion; + public TextureRegion baseRegion, heatRegion; - protected Cons2 drawer = (tile, entity) -> Draw.rect(region, tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90); - protected Cons2 heatDrawer = (tile, entity) -> { + public Cons2 drawer = (tile, entity) -> Draw.rect(region, tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90); + public Cons2 heatDrawer = (tile, entity) -> { if(entity.heat <= 0.00001f) return; Draw.color(heatColor, entity.heat); Draw.blend(Blending.additive); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/BufferedItemBridge.java b/core/src/io/anuke/mindustry/world/blocks/distribution/BufferedItemBridge.java index 4fc815676d..cb684c90f3 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/BufferedItemBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/BufferedItemBridge.java @@ -7,10 +7,10 @@ import io.anuke.mindustry.world.*; import java.io.*; public class BufferedItemBridge extends ExtendingItemBridge{ - protected int timerAccept = timers++; + public final int timerAccept = timers++; - protected float speed = 40f; - protected int bufferCapacity = 50; + public float speed = 40f; + public int bufferCapacity = 50; public BufferedItemBridge(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java index e05812d523..f046a63850 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java @@ -32,7 +32,7 @@ public class Conveyor extends Block implements Autotiler{ private final Vector2 tr2 = new Vector2(); private TextureRegion[][] regions = new TextureRegion[7][4]; - protected float speed = 0f; + public float speed = 0f; protected Conveyor(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java index 0d692a504d..8965a1be97 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java @@ -20,12 +20,12 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class ItemBridge extends Block{ - protected int timerTransport = timers++; - protected int range; - protected float transportTime = 2f; - protected TextureRegion endRegion, bridgeRegion, arrowRegion; - protected BuildRequest otherReq; + public final int timerTransport = timers++; + public int range; + public float transportTime = 2f; + public TextureRegion endRegion, bridgeRegion, arrowRegion; + private static BuildRequest otherReq; private static int lastPlaced = Pos.invalid; public ItemBridge(String name){ diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java index 7877317185..8fe62c1a05 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java @@ -17,8 +17,8 @@ import java.io.IOException; import static io.anuke.mindustry.Vars.content; public class Junction extends Block{ - protected float speed = 26; //frames taken to go through this junction - protected int capacity = 6; + public float speed = 26; //frames taken to go through this junction + public int capacity = 6; public Junction(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java index c4a1aba990..f6799d7dc7 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java @@ -20,17 +20,17 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class MassDriver extends Block{ - protected float range; - protected float rotateSpeed = 0.04f; - protected float translation = 7f; - protected int minDistribute = 10; - protected float knockback = 4f; - protected float reloadTime = 100f; - protected Effect shootEffect = Fx.shootBig2; - protected Effect smokeEffect = Fx.shootBigSmoke2; - protected Effect recieveEffect = Fx.mineBig; - protected float shake = 3f; - protected TextureRegion baseRegion; + public float range; + public float rotateSpeed = 0.04f; + public float translation = 7f; + public int minDistribute = 10; + public float knockback = 4f; + public float reloadTime = 100f; + public Effect shootEffect = Fx.shootBig2; + public Effect smokeEffect = Fx.shootBigSmoke2; + public Effect recieveEffect = Fx.mineBig; + public float shake = 3f; + public TextureRegion baseRegion; public MassDriver(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/OverflowGate.java b/core/src/io/anuke/mindustry/world/blocks/distribution/OverflowGate.java index b25635e005..a510bae97c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/OverflowGate.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/OverflowGate.java @@ -10,7 +10,7 @@ import io.anuke.mindustry.world.meta.BlockGroup; import java.io.*; public class OverflowGate extends Block{ - protected float speed = 1f; + public float speed = 1f; public OverflowGate(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java index fdff392743..c8e9fb441d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java @@ -9,7 +9,7 @@ import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.meta.BlockGroup; public class Router extends Block{ - protected float speed = 8f; + public float speed = 8f; public Router(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java index 13eb1224e8..60c88e77b1 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java @@ -18,7 +18,7 @@ import static io.anuke.mindustry.Vars.content; public class Sorter extends Block{ private static Item lastItem; - protected boolean invert; + public boolean invert; public Sorter(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/liquid/ArmoredConduit.java b/core/src/io/anuke/mindustry/world/blocks/liquid/ArmoredConduit.java index 7a50ef5f0a..d74087123c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/liquid/ArmoredConduit.java +++ b/core/src/io/anuke/mindustry/world/blocks/liquid/ArmoredConduit.java @@ -9,7 +9,7 @@ import io.anuke.mindustry.world.Edges; import io.anuke.mindustry.world.Tile; public class ArmoredConduit extends Conduit{ - protected TextureRegion capRegion; + public TextureRegion capRegion; public ArmoredConduit(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/liquid/Conduit.java b/core/src/io/anuke/mindustry/world/blocks/liquid/Conduit.java index 80c2ab5baf..e68b58e48d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/liquid/Conduit.java +++ b/core/src/io/anuke/mindustry/world/blocks/liquid/Conduit.java @@ -16,12 +16,12 @@ import io.anuke.mindustry.world.blocks.*; import io.anuke.mindustry.world.modules.*; public class Conduit extends LiquidBlock implements Autotiler{ - protected final int timerFlow = timers++; + public final int timerFlow = timers++; - protected TextureRegion[] topRegions = new TextureRegion[7]; - protected TextureRegion[] botRegions = new TextureRegion[7]; + public TextureRegion[] topRegions = new TextureRegion[7]; + public TextureRegion[] botRegions = new TextureRegion[7]; - protected float leakResistance = 1.5f; + public float leakResistance = 1.5f; public Conduit(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/liquid/LiquidOverflowGate.java b/core/src/io/anuke/mindustry/world/blocks/liquid/LiquidOverflowGate.java index dafcef1508..3004835249 100644 --- a/core/src/io/anuke/mindustry/world/blocks/liquid/LiquidOverflowGate.java +++ b/core/src/io/anuke/mindustry/world/blocks/liquid/LiquidOverflowGate.java @@ -9,7 +9,7 @@ import io.anuke.mindustry.world.meta.*; //TODO implement later public class LiquidOverflowGate extends LiquidBlock{ - int topRegion; + public int topRegion; public LiquidOverflowGate(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/power/ImpactReactor.java b/core/src/io/anuke/mindustry/world/blocks/power/ImpactReactor.java index e1945f1609..77e2cf2ad2 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/ImpactReactor.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/ImpactReactor.java @@ -19,17 +19,17 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class ImpactReactor extends PowerGenerator{ - protected int timerUse = timers++; + public final int timerUse = timers++; - protected int plasmas = 4; - protected float warmupSpeed = 0.001f; - protected float itemDuration = 60f; - protected int explosionRadius = 50; - protected int explosionDamage = 2000; + public int plasmas = 4; + public float warmupSpeed = 0.001f; + public float itemDuration = 60f; + public int explosionRadius = 50; + public int explosionDamage = 2000; - protected Color plasma1 = Color.valueOf("ffd06b"), plasma2 = Color.valueOf("ff361b"); - protected int bottomRegion; - protected int[] plasmaRegions; + public Color plasma1 = Color.valueOf("ffd06b"), plasma2 = Color.valueOf("ff361b"); + public int bottomRegion; + public int[] plasmaRegions; public ImpactReactor(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/power/ItemLiquidGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/ItemLiquidGenerator.java index 07effa5b30..7d4b378b2a 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/ItemLiquidGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/ItemLiquidGenerator.java @@ -20,20 +20,20 @@ import static io.anuke.mindustry.Vars.*; * Liquids will take priority over items. */ public class ItemLiquidGenerator extends PowerGenerator{ - protected float minItemEfficiency = 0.2f; + public float minItemEfficiency = 0.2f; /** The time in number of ticks during which a single item will produce power. */ - protected float itemDuration = 70f; + public float itemDuration = 70f; - protected float minLiquidEfficiency = 0.2f; + public float minLiquidEfficiency = 0.2f; /** Maximum liquid used per frame. */ - protected float maxLiquidGenerate = 0.4f; + public float maxLiquidGenerate = 0.4f; - protected Effect generateEffect = Fx.generatespark; - protected Effect explodeEffect = Fx.generatespark; - protected Color heatColor = Color.valueOf("ff9b59"); - protected TextureRegion topRegion, liquidRegion; - protected boolean randomlyExplode = true; - protected boolean defaults = false; + public Effect generateEffect = Fx.generatespark; + public Effect explodeEffect = Fx.generatespark; + public Color heatColor = Color.valueOf("ff9b59"); + public TextureRegion topRegion, liquidRegion; + public boolean randomlyExplode = true; + public boolean defaults = false; public ItemLiquidGenerator(boolean hasItems, boolean hasLiquids, String name){ this(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/power/LightBlock.java b/core/src/io/anuke/mindustry/world/blocks/power/LightBlock.java index 0fc61676f2..06e1b257cb 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/LightBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/LightBlock.java @@ -16,9 +16,9 @@ import static io.anuke.mindustry.Vars.*; public class LightBlock extends Block{ private static int lastColor = 0; - protected float brightness = 0.9f; - protected float radius = 200f; - protected int topRegion; + public float brightness = 0.9f; + public float radius = 200f; + public int topRegion; public LightBlock(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java b/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java index 2aa478a3bf..7ae1e4ca70 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java @@ -22,22 +22,22 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class NuclearReactor extends PowerGenerator{ - protected final int timerFuel = timers++; + public final int timerFuel = timers++; - protected final Vector2 tr = new Vector2(); + public final Vector2 tr = new Vector2(); - protected Color lightColor = Color.valueOf("7f19ea"); - protected Color coolColor = new Color(1, 1, 1, 0f); - protected Color hotColor = Color.valueOf("ff9575a3"); - protected float itemDuration = 120; //time to consume 1 fuel - protected float heating = 0.01f; //heating per frame * fullness - protected float smokeThreshold = 0.3f; //threshold at which block starts smoking - protected int explosionRadius = 40; - protected int explosionDamage = 1350; - protected float flashThreshold = 0.46f; //heat threshold at which the lights start flashing - protected float coolantPower = 0.5f; + public Color lightColor = Color.valueOf("7f19ea"); + public Color coolColor = new Color(1, 1, 1, 0f); + public Color hotColor = Color.valueOf("ff9575a3"); + public float itemDuration = 120; //time to consume 1 fuel + public float heating = 0.01f; //heating per frame * fullness + public float smokeThreshold = 0.3f; //threshold at which block starts smoking + public int explosionRadius = 40; + public int explosionDamage = 1350; + public float flashThreshold = 0.46f; //heat threshold at which the lights start flashing + public float coolantPower = 0.5f; - protected TextureRegion topRegion, lightsRegion; + public TextureRegion topRegion, lightsRegion; public NuclearReactor(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerDiode.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerDiode.java index 08d621a09c..1dee0636a5 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerDiode.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerDiode.java @@ -13,7 +13,7 @@ import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.mindustry.entities.traits.BuilderTrait; public class PowerDiode extends Block{ - protected TextureRegion arrow; + public TextureRegion arrow; public PowerDiode(String name){ super(name); @@ -50,7 +50,7 @@ public class PowerDiode extends Block{ } // battery % of the graph on either side, defaults to zero - protected float bar(Tile tile){ + public float bar(Tile tile){ return (tile != null && tile.block().hasPower) ? tile.entity.power.graph.getBatteryStored() / tile.entity.power.graph.getTotalBatteryCapacity() : 0f; } diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerGenerator.java index 9f0f21f008..04d3d99a7c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerGenerator.java @@ -13,7 +13,7 @@ import java.io.*; public class PowerGenerator extends PowerDistributor{ /** The amount of power produced per tick in case of an efficiency of 1.0, which represents 100%. */ - protected float powerProduction; + public float powerProduction; public BlockStat generationType = BlockStat.basePowerGeneration; public PowerGenerator(String name){ diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java index 8c3002c417..fa4d04dfb0 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java @@ -21,12 +21,12 @@ import static io.anuke.mindustry.Vars.*; public class PowerNode extends PowerBlock{ protected static boolean returnValue = false; - protected ObjectSet graphs = new ObjectSet<>(); - protected Vector2 t1 = new Vector2(), t2 = new Vector2(); - protected TextureRegion laser, laserEnd; + protected final ObjectSet graphs = new ObjectSet<>(); + protected final Vector2 t1 = new Vector2(), t2 = new Vector2(); - protected float laserRange = 6; - protected int maxNodes = 3; + public TextureRegion laser, laserEnd; + public float laserRange = 6; + public int maxNodes = 3; public PowerNode(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/power/ThermalGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/ThermalGenerator.java index b2d9576718..5bb3cce8d7 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/ThermalGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/ThermalGenerator.java @@ -12,7 +12,7 @@ import io.anuke.mindustry.world.meta.*; import static io.anuke.mindustry.Vars.renderer; public class ThermalGenerator extends PowerGenerator{ - protected Effect generateEffect = Fx.none; + public Effect generateEffect = Fx.none; public ThermalGenerator(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java b/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java index c3901d435c..4cf0a6b2f1 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java @@ -16,14 +16,14 @@ import io.anuke.mindustry.world.meta.Attribute; import java.io.*; public class Cultivator extends GenericCrafter{ - protected static final Color plantColor = Color.valueOf("5541b1"); - protected static final Color plantColorLight = Color.valueOf("7457ce"); - protected static final Color bottomColor = Color.valueOf("474747"); + public Color plantColor = Color.valueOf("5541b1"); + public Color plantColorLight = Color.valueOf("7457ce"); + public Color bottomColor = Color.valueOf("474747"); - protected TextureRegion middleRegion, topRegion; - protected RandomXS128 random = new RandomXS128(0); - protected float recurrence = 6f; - protected Attribute attribute = Attribute.spores; + public TextureRegion middleRegion, topRegion; + public RandomXS128 random = new RandomXS128(0); + public float recurrence = 6f; + public Attribute attribute = Attribute.spores; public Cultivator(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Drill.java b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java index 309761830b..c4ee18715a 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Drill.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java @@ -21,41 +21,40 @@ import io.anuke.mindustry.world.meta.*; import static io.anuke.mindustry.Vars.*; public class Drill extends Block{ - protected final static float hardnessDrillMultiplier = 50f; + public float hardnessDrillMultiplier = 50f; protected final ObjectIntMap oreCount = new ObjectIntMap<>(); protected final Array itemArray = new Array<>(); /** Maximum tier of blocks this drill can mine. */ - protected int tier; + public int tier; /** Base time to drill one ore, in frames. */ - protected float drillTime = 300; + public float drillTime = 300; /** How many times faster the drill will progress when boosted by liquid. */ - protected float liquidBoostIntensity = 1.6f; + public float liquidBoostIntensity = 1.6f; /** Speed at which the drill speeds up. */ - protected float warmupSpeed = 0.02f; + public float warmupSpeed = 0.02f; //return variables for countOre protected Item returnItem; protected int returnCount; /** Whether to draw the item this drill is mining. */ - protected boolean drawMineItem = false; + public boolean drawMineItem = false; /** Effect played when an item is produced. This is colored. */ - protected Effect drillEffect = Fx.mine; + public Effect drillEffect = Fx.mine; /** Speed the drill bit rotates at. */ - protected float rotateSpeed = 2f; + public float rotateSpeed = 2f; /** Effect randomly played while drilling. */ - protected Effect updateEffect = Fx.pulverizeSmall; + public Effect updateEffect = Fx.pulverizeSmall; /** Chance the update effect will appear. */ - protected float updateEffectChance = 0.02f; + public float updateEffectChance = 0.02f; - protected boolean drawRim = false; - - protected Color heatColor = Color.valueOf("ff5512"); - protected TextureRegion rimRegion; - protected TextureRegion rotatorRegion; - protected TextureRegion topRegion; + public boolean drawRim = false; + public Color heatColor = Color.valueOf("ff5512"); + public TextureRegion rimRegion; + public TextureRegion rotatorRegion; + public TextureRegion topRegion; public Drill(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java b/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java index deb606eedd..4f79a420b5 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java @@ -6,11 +6,11 @@ import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.meta.*; public class Fracker extends SolidPump{ - protected final float itemUseTime = 100f; + public float itemUseTime = 100f; - protected TextureRegion liquidRegion; - protected TextureRegion rotatorRegion; - protected TextureRegion topRegion; + public TextureRegion liquidRegion; + public TextureRegion rotatorRegion; + public TextureRegion topRegion; public Fracker(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java b/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java index 1878ada116..7c19426838 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java @@ -17,16 +17,16 @@ import io.anuke.mindustry.world.meta.*; import java.io.*; public class GenericCrafter extends Block{ - protected ItemStack outputItem; - protected LiquidStack outputLiquid; + public ItemStack outputItem; + public LiquidStack outputLiquid; - protected float craftTime = 80; - protected Effect craftEffect = Fx.none; - protected Effect updateEffect = Fx.none; - protected float updateEffectChance = 0.04f; + public float craftTime = 80; + public Effect craftEffect = Fx.none; + public Effect updateEffect = Fx.none; + public float updateEffectChance = 0.04f; - protected Cons drawer = null; - protected Prov drawIcons = null; + public Cons drawer = null; + public Prov drawIcons = null; public GenericCrafter(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/production/GenericSmelter.java b/core/src/io/anuke/mindustry/world/blocks/production/GenericSmelter.java index 828decc1e0..ba0c20bb75 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/GenericSmelter.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/GenericSmelter.java @@ -11,8 +11,8 @@ import static io.anuke.mindustry.Vars.renderer; /** A GenericCrafter with a new glowing region drawn on top. */ public class GenericSmelter extends GenericCrafter{ - protected Color flameColor = Color.valueOf("ffc999"); - protected TextureRegion topRegion; + public Color flameColor = Color.valueOf("ffc999"); + public TextureRegion topRegion; public GenericSmelter(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Incinerator.java b/core/src/io/anuke/mindustry/world/blocks/production/Incinerator.java index fce368f246..57c00e5a2c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Incinerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Incinerator.java @@ -15,8 +15,8 @@ import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; public class Incinerator extends Block{ - protected Effect effect = Fx.fuelburn; - protected Color flameColor = Color.valueOf("ffad9d"); + public Effect effect = Fx.fuelburn; + public Color flameColor = Color.valueOf("ffad9d"); public Incinerator(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Pump.java b/core/src/io/anuke/mindustry/world/blocks/production/Pump.java index 9b91d8b98f..9142cc49af 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Pump.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Pump.java @@ -19,7 +19,7 @@ public class Pump extends LiquidBlock{ protected final Array drawTiles = new Array<>(); protected final Array updateTiles = new Array<>(); - protected final int timerContentCheck = timers++; + public final int timerContentCheck = timers++; /** Pump amount, total. */ protected float pumpAmount = 1f; diff --git a/core/src/io/anuke/mindustry/world/blocks/production/SolidPump.java b/core/src/io/anuke/mindustry/world/blocks/production/SolidPump.java index bb6cb397cf..6a3e5d806c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/SolidPump.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/SolidPump.java @@ -20,12 +20,12 @@ import io.anuke.mindustry.world.meta.BlockStat; * Pump that makes liquid from solids and takes in power. Only works on solid floor blocks. */ public class SolidPump extends Pump{ - protected Liquid result = Liquids.water; - protected Effect updateEffect = Fx.none; - protected float updateEffectChance = 0.02f; - protected float rotateSpeed = 1f; + public Liquid result = Liquids.water; + public Effect updateEffect = Fx.none; + public float updateEffectChance = 0.02f; + public float rotateSpeed = 1f; /** Attribute that is checked when calculating output. */ - protected Attribute attribute; + public Attribute attribute; public SolidPump(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java b/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java index 5513f462ec..ec3f325db2 100644 --- a/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java +++ b/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java @@ -21,7 +21,7 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class LiquidSource extends Block{ - private static Liquid lastLiquid; + public static Liquid lastLiquid; public LiquidSource(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java b/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java index c164e7011e..3ee36c332b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java @@ -24,7 +24,7 @@ import io.anuke.mindustry.world.modules.*; import static io.anuke.mindustry.Vars.*; public class CoreBlock extends StorageBlock{ - protected Mech mech = Mechs.starter; + public Mech mech = Mechs.starter; public CoreBlock(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java b/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java index 47973a9a8b..92aa7ae75c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java @@ -21,9 +21,9 @@ import static io.anuke.mindustry.Vars.data; import static io.anuke.mindustry.Vars.world; public class LaunchPad extends StorageBlock{ - protected final int timerLaunch = timers++; + public final int timerLaunch = timers++; /** Time inbetween launches. */ - protected float launchTime; + public float launchTime; public LaunchPad(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java b/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java index f67701d4d5..b809fc351c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java @@ -15,8 +15,8 @@ import java.io.*; import static io.anuke.mindustry.Vars.content; public class Unloader extends Block{ - protected float speed = 1f; - protected final int timerUnload = timers++; + public float speed = 1f; + public final int timerUnload = timers++; private static Item lastItem; diff --git a/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java b/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java index ef7314e00b..c5a07cdead 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java @@ -26,7 +26,7 @@ import static io.anuke.mindustry.Vars.*; public class MechPad extends Block{ public @NonNull Mech mech; - protected float buildTime = 60 * 5; + public float buildTime = 60 * 5; public MechPad(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java b/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java index 6c5e8698b2..e02381d73d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java @@ -19,13 +19,13 @@ import io.anuke.mindustry.world.meta.BlockFlag; public class RepairPoint extends Block{ private static Rectangle rect = new Rectangle(); - protected int timerTarget = timers++; + public int timerTarget = timers++; - protected float repairRadius = 50f; - protected float repairSpeed = 0.3f; - protected float powerUse; - protected TextureRegion baseRegion; - protected TextureRegion laser, laserEnd; + public float repairRadius = 50f; + public float repairSpeed = 0.3f; + public float powerUse; + public TextureRegion baseRegion; + public TextureRegion laser, laserEnd; public RepairPoint(String name){ super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java b/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java index 678d43c10f..93e19b7266 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java @@ -27,12 +27,12 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class UnitFactory extends Block{ - protected UnitType unitType; - protected float produceTime = 1000f; - protected float launchVelocity = 0f; - protected TextureRegion topRegion; - protected int maxSpawn = 4; - protected int[] capacities; + public UnitType unitType; + public float produceTime = 1000f; + public float launchVelocity = 0f; + public TextureRegion topRegion; + public int maxSpawn = 4; + public int[] capacities; public UnitFactory(String name){ super(name); diff --git a/tools/build.gradle b/tools/build.gradle index dff7745f5d..6a2825747a 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -297,7 +297,7 @@ task pack(dependsOn: classes){ //run generation task; generate all needed sprites file(genFolder).mkdirs() javaexec{ - main = "io.anuke.mindustry.ImagePacker" + main = "io.anuke.mindustry.tools.ImagePacker" classpath = sourceSets.main.runtimeClasspath standardInput = System.in workingDir = genFolder @@ -310,7 +310,7 @@ task pack(dependsOn: classes){ } jvmArgs("-Djava.awt.headless=true") - main = "io.anuke.mindustry.Upscaler" + main = "io.anuke.mindustry.tools.Upscaler" classpath = sourceSets.main.runtimeClasspath standardInput = System.in workingDir = "../core/assets-raw/sprites_out/ui/icons" @@ -351,7 +351,7 @@ task pack(dependsOn: classes){ task genSprites(dependsOn: classes, type: JavaExec){ finalizedBy 'antialiasGen' - main = "io.anuke.mindustry.ImagePacker" + main = "io.anuke.mindustry.tools.ImagePacker" classpath = sourceSets.main.runtimeClasspath jvmArgs("-Djava.awt.headless=true") standardInput = System.in @@ -361,7 +361,7 @@ task genSprites(dependsOn: classes, type: JavaExec){ task updateBundles(dependsOn: classes, type: JavaExec){ file(genFolder).mkdirs() - main = "io.anuke.mindustry.BundleLauncher" + main = "io.anuke.mindustry.tools.BundleLauncher" classpath = sourceSets.main.runtimeClasspath standardInput = System.in workingDir = "../core/assets/bundles/" diff --git a/tools/src/io/anuke/mindustry/BundleLauncher.java b/tools/src/io/anuke/mindustry/tools/BundleLauncher.java similarity index 98% rename from tools/src/io/anuke/mindustry/BundleLauncher.java rename to tools/src/io/anuke/mindustry/tools/BundleLauncher.java index 3888f641da..7d99eadac2 100644 --- a/tools/src/io/anuke/mindustry/BundleLauncher.java +++ b/tools/src/io/anuke/mindustry/tools/BundleLauncher.java @@ -1,4 +1,4 @@ -package io.anuke.mindustry; +package io.anuke.mindustry.tools; import io.anuke.arc.collection.Array; import io.anuke.arc.collection.OrderedMap; diff --git a/tools/src/io/anuke/mindustry/Generators.java b/tools/src/io/anuke/mindustry/tools/Generators.java similarity index 99% rename from tools/src/io/anuke/mindustry/Generators.java rename to tools/src/io/anuke/mindustry/tools/Generators.java index 718f994376..91887f0383 100644 --- a/tools/src/io/anuke/mindustry/Generators.java +++ b/tools/src/io/anuke/mindustry/tools/Generators.java @@ -1,4 +1,4 @@ -package io.anuke.mindustry; +package io.anuke.mindustry.tools; import io.anuke.arc.collection.*; import io.anuke.arc.graphics.*; @@ -6,7 +6,7 @@ import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.*; import io.anuke.arc.util.*; import io.anuke.arc.util.noise.*; -import io.anuke.mindustry.ImagePacker.*; +import io.anuke.mindustry.tools.ImagePacker.*; import io.anuke.mindustry.ctype.*; import io.anuke.mindustry.type.*; import io.anuke.mindustry.ui.*; diff --git a/tools/src/io/anuke/mindustry/Image.java b/tools/src/io/anuke/mindustry/tools/Image.java similarity index 97% rename from tools/src/io/anuke/mindustry/Image.java rename to tools/src/io/anuke/mindustry/tools/Image.java index 30e06b8170..f7c987762b 100644 --- a/tools/src/io/anuke/mindustry/Image.java +++ b/tools/src/io/anuke/mindustry/tools/Image.java @@ -1,9 +1,9 @@ -package io.anuke.mindustry; +package io.anuke.mindustry.tools; import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.util.Structs; -import io.anuke.mindustry.ImagePacker.GenRegion; +import io.anuke.mindustry.tools.ImagePacker.GenRegion; import javax.imageio.ImageIO; import java.awt.*; diff --git a/tools/src/io/anuke/mindustry/ImagePacker.java b/tools/src/io/anuke/mindustry/tools/ImagePacker.java similarity index 98% rename from tools/src/io/anuke/mindustry/ImagePacker.java rename to tools/src/io/anuke/mindustry/tools/ImagePacker.java index 200da5c602..7e4ff467a4 100644 --- a/tools/src/io/anuke/mindustry/ImagePacker.java +++ b/tools/src/io/anuke/mindustry/tools/ImagePacker.java @@ -1,4 +1,4 @@ -package io.anuke.mindustry; +package io.anuke.mindustry.tools; import io.anuke.arc.Core; import io.anuke.arc.collection.ObjectMap; @@ -7,6 +7,7 @@ import io.anuke.arc.graphics.g2d.TextureAtlas.AtlasRegion; import io.anuke.arc.util.*; import io.anuke.arc.util.Log.LogHandler; import io.anuke.arc.util.Log.NoopLogHandler; +import io.anuke.mindustry.*; import io.anuke.mindustry.core.ContentLoader; import javax.imageio.ImageIO; diff --git a/tools/src/io/anuke/mindustry/tools/ScriptStubGenerator.java b/tools/src/io/anuke/mindustry/tools/ScriptStubGenerator.java new file mode 100644 index 0000000000..0543108297 --- /dev/null +++ b/tools/src/io/anuke/mindustry/tools/ScriptStubGenerator.java @@ -0,0 +1,60 @@ +package io.anuke.mindustry.tools; + +import io.anuke.arc.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.files.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.util.*; +import org.reflections.*; +import org.reflections.scanners.*; +import org.reflections.util.*; + +import java.util.*; + +public class ScriptStubGenerator{ + + public static void main(String[] args){ + String base = "io.anuke.mindustry"; + Array blacklist = Array.with("plugin", "mod", "net", "io", "tools", "gen"); + Array nameBlacklist = Array.with("ClientLauncher", "NetClient", "NetServer"); + Array> whitelist = Array.with(Draw.class, Core.class, TextureAtlas.class, TextureRegion.class); + + String fileTemplate = "package io.anuke.mindustry.mod;\n" + + "\n" + + "import io.anuke.arc.collection.*;\n" + + "//obviously autogenerated, do not touch\n" + + "class ClassAccess{\n" + + "\tstatic final Array> allowedClasses = Array.with($ALLOWED_CLASSES$);\n" + + "\tstatic final ObjectSet allowedClassNames = ObjectSet.with($ALLOWED_CLASS_NAMES$);\n" + + "}"; + + List classLoadersList = new LinkedList<>(); + classLoadersList.add(ClasspathHelper.contextClassLoader()); + classLoadersList.add(ClasspathHelper.staticClassLoader()); + + Reflections reflections = new Reflections(new ConfigurationBuilder() + .setScanners(new SubTypesScanner(false), new ResourcesScanner()) + .setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0]))) + .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix("io.anuke.mindustry")))); + + Array> classes = Array.with(reflections.getSubTypesOf(Object.class)); + classes.addAll(reflections.getSubTypesOf(Enum.class)); + classes.addAll(whitelist); + classes.sort(Structs.comparing(Class::getName)); + + classes.removeAll(type -> type.isSynthetic() || type.isAnonymousClass() || type.isMemberClass() || type.getCanonicalName() == null + || blacklist.contains(s -> type.getName().startsWith(base + "." + s + ".")) || nameBlacklist.contains(type.getSimpleName())); + + StringBuilder result = new StringBuilder("//Generated class. Do not modify.\n"); + for(Class type : classes){ + result.append("const ").append(type.getSimpleName()).append(" = ").append("Java.type('").append(type.getCanonicalName()).append("')\n"); + } + + //Log.info(result); + + new FileHandle("core/assets/scripts/global.js").writeString(result.toString()); + new FileHandle("core/src/io/anuke/mindustry/mod/ClassAccess.java").writeString(fileTemplate + .replace("$ALLOWED_CLASSES$", classes.toString(", ", type -> type.getName() + ".class")) + .replace("$ALLOWED_CLASS_NAMES$", classes.toString(", ", type -> "\"" + type.getName() + "\""))); + } +} diff --git a/tools/src/io/anuke/mindustry/SquareMarcher.java b/tools/src/io/anuke/mindustry/tools/SquareMarcher.java similarity index 99% rename from tools/src/io/anuke/mindustry/SquareMarcher.java rename to tools/src/io/anuke/mindustry/tools/SquareMarcher.java index 278f9543aa..c795637e25 100644 --- a/tools/src/io/anuke/mindustry/SquareMarcher.java +++ b/tools/src/io/anuke/mindustry/tools/SquareMarcher.java @@ -1,4 +1,4 @@ -package io.anuke.mindustry; +package io.anuke.mindustry.tools; import io.anuke.arc.Core; import io.anuke.arc.files.FileHandle; diff --git a/tools/src/io/anuke/mindustry/Upscaler.java b/tools/src/io/anuke/mindustry/tools/Upscaler.java similarity index 97% rename from tools/src/io/anuke/mindustry/Upscaler.java rename to tools/src/io/anuke/mindustry/tools/Upscaler.java index 12cc32ee3b..5101552ddb 100644 --- a/tools/src/io/anuke/mindustry/Upscaler.java +++ b/tools/src/io/anuke/mindustry/tools/Upscaler.java @@ -1,4 +1,4 @@ -package io.anuke.mindustry; +package io.anuke.mindustry.tools; import io.anuke.arc.*; import io.anuke.arc.backends.sdl.*;